diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_gas_consume.xml b/app/src/main/res/layout/activity_gas_consume.xml
index 9f0a836..cc916a1 100644
--- a/app/src/main/res/layout/activity_gas_consume.xml
+++ b/app/src/main/res/layout/activity_gas_consume.xml
@@ -229,7 +229,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:background="@drawable/selector_clear_water_check_box"
+ android:background="@drawable/selector_water_heater_clear_water"
android:button="@null" />
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_gas_consume.xml b/app/src/main/res/layout/activity_gas_consume.xml
index 9f0a836..cc916a1 100644
--- a/app/src/main/res/layout/activity_gas_consume.xml
+++ b/app/src/main/res/layout/activity_gas_consume.xml
@@ -229,7 +229,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:background="@drawable/selector_clear_water_check_box"
+ android:background="@drawable/selector_water_heater_clear_water"
android:button="@null" />
@@ -120,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -148,7 +148,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -175,7 +175,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_gas_consume.xml b/app/src/main/res/layout/activity_gas_consume.xml
index 9f0a836..cc916a1 100644
--- a/app/src/main/res/layout/activity_gas_consume.xml
+++ b/app/src/main/res/layout/activity_gas_consume.xml
@@ -229,7 +229,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:background="@drawable/selector_clear_water_check_box"
+ android:background="@drawable/selector_water_heater_clear_water"
android:button="@null" />
@@ -120,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -148,7 +148,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -175,7 +175,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_single_strip.xml b/app/src/main/res/layout/activity_single_strip.xml
index 8fc949d..455645e 100644
--- a/app/src/main/res/layout/activity_single_strip.xml
+++ b/app/src/main/res/layout/activity_single_strip.xml
@@ -24,7 +24,7 @@
android:id="@+id/turnOffCheckBox"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/selector_turn_off_single_strip"
+ android:background="@drawable/selector_single_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_gas_consume.xml b/app/src/main/res/layout/activity_gas_consume.xml
index 9f0a836..cc916a1 100644
--- a/app/src/main/res/layout/activity_gas_consume.xml
+++ b/app/src/main/res/layout/activity_gas_consume.xml
@@ -229,7 +229,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:background="@drawable/selector_clear_water_check_box"
+ android:background="@drawable/selector_water_heater_clear_water"
android:button="@null" />
@@ -120,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -148,7 +148,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -175,7 +175,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_single_strip.xml b/app/src/main/res/layout/activity_single_strip.xml
index 8fc949d..455645e 100644
--- a/app/src/main/res/layout/activity_single_strip.xml
+++ b/app/src/main/res/layout/activity_single_strip.xml
@@ -24,7 +24,7 @@
android:id="@+id/turnOffCheckBox"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/selector_turn_off_single_strip"
+ android:background="@drawable/selector_single_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml
new file mode 100644
index 0000000..b3a661a
--- /dev/null
+++ b/app/src/main/res/layout/activity_water_dispenser.xml
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_gas_consume.xml b/app/src/main/res/layout/activity_gas_consume.xml
index 9f0a836..cc916a1 100644
--- a/app/src/main/res/layout/activity_gas_consume.xml
+++ b/app/src/main/res/layout/activity_gas_consume.xml
@@ -229,7 +229,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:background="@drawable/selector_clear_water_check_box"
+ android:background="@drawable/selector_water_heater_clear_water"
android:button="@null" />
@@ -120,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -148,7 +148,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -175,7 +175,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_single_strip.xml b/app/src/main/res/layout/activity_single_strip.xml
index 8fc949d..455645e 100644
--- a/app/src/main/res/layout/activity_single_strip.xml
+++ b/app/src/main/res/layout/activity_single_strip.xml
@@ -24,7 +24,7 @@
android:id="@+id/turnOffCheckBox"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/selector_turn_off_single_strip"
+ android:background="@drawable/selector_single_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml
new file mode 100644
index 0000000..b3a661a
--- /dev/null
+++ b/app/src/main/res/layout/activity_water_dispenser.xml
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_device_cooker_control.xml b/app/src/main/res/layout/fragment_device_cooker_control.xml
index e9a4533..8c6aed7 100644
--- a/app/src/main/res/layout/fragment_device_cooker_control.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_control.xml
@@ -31,7 +31,7 @@
android:id="@+id/turnOffRadioButton"
android:layout_width="@dimen/titleViewHeight"
android:layout_height="@dimen/titleViewHeight"
- android:background="@drawable/selector_turn_off_radio_button"
+ android:background="@drawable/selector_device_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78112af..bd10711 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,8 @@
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_gas_consume.xml b/app/src/main/res/layout/activity_gas_consume.xml
index 9f0a836..cc916a1 100644
--- a/app/src/main/res/layout/activity_gas_consume.xml
+++ b/app/src/main/res/layout/activity_gas_consume.xml
@@ -229,7 +229,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:background="@drawable/selector_clear_water_check_box"
+ android:background="@drawable/selector_water_heater_clear_water"
android:button="@null" />
@@ -120,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -148,7 +148,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -175,7 +175,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_single_strip.xml b/app/src/main/res/layout/activity_single_strip.xml
index 8fc949d..455645e 100644
--- a/app/src/main/res/layout/activity_single_strip.xml
+++ b/app/src/main/res/layout/activity_single_strip.xml
@@ -24,7 +24,7 @@
android:id="@+id/turnOffCheckBox"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/selector_turn_off_single_strip"
+ android:background="@drawable/selector_single_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml
new file mode 100644
index 0000000..b3a661a
--- /dev/null
+++ b/app/src/main/res/layout/activity_water_dispenser.xml
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_device_cooker_control.xml b/app/src/main/res/layout/fragment_device_cooker_control.xml
index e9a4533..8c6aed7 100644
--- a/app/src/main/res/layout/fragment_device_cooker_control.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_control.xml
@@ -31,7 +31,7 @@
android:id="@+id/turnOffRadioButton"
android:layout_width="@dimen/titleViewHeight"
android:layout_height="@dimen/titleViewHeight"
- android:background="@drawable/selector_turn_off_radio_button"
+ android:background="@drawable/selector_device_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/fragment_device_fireplace_control.xml b/app/src/main/res/layout/fragment_device_fireplace_control.xml
index 2b7fdc0..513982d 100644
--- a/app/src/main/res/layout/fragment_device_fireplace_control.xml
+++ b/app/src/main/res/layout/fragment_device_fireplace_control.xml
@@ -31,7 +31,7 @@
android:id="@+id/turnOffRadioButton"
android:layout_width="@dimen/titleViewHeight"
android:layout_height="@dimen/titleViewHeight"
- android:background="@drawable/selector_turn_off_radio_button"
+ android:background="@drawable/selector_device_turn_off"
android:button="@null"
android:gravity="center" />
@@ -44,6 +44,7 @@
android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/bg_solid_layout_white_radius_10"
android:orientation="vertical"
+ android:paddingHorizontal="@dimen/dp_20"
android:paddingVertical="@dimen/dp_10">
+ android:drawableTop="@drawable/selector_range_hood_low_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="舒适" />
+ android:drawableTop="@drawable/selector_range_hood_high_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="节能" />
+ android:drawableTop="@drawable/selector_range_hood_max_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="夏季" />
-
-
-
-
-
-
-
-
-
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_gas_consume.xml b/app/src/main/res/layout/activity_gas_consume.xml
index 9f0a836..cc916a1 100644
--- a/app/src/main/res/layout/activity_gas_consume.xml
+++ b/app/src/main/res/layout/activity_gas_consume.xml
@@ -229,7 +229,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:background="@drawable/selector_clear_water_check_box"
+ android:background="@drawable/selector_water_heater_clear_water"
android:button="@null" />
@@ -120,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -148,7 +148,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -175,7 +175,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_single_strip.xml b/app/src/main/res/layout/activity_single_strip.xml
index 8fc949d..455645e 100644
--- a/app/src/main/res/layout/activity_single_strip.xml
+++ b/app/src/main/res/layout/activity_single_strip.xml
@@ -24,7 +24,7 @@
android:id="@+id/turnOffCheckBox"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/selector_turn_off_single_strip"
+ android:background="@drawable/selector_single_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml
new file mode 100644
index 0000000..b3a661a
--- /dev/null
+++ b/app/src/main/res/layout/activity_water_dispenser.xml
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_device_cooker_control.xml b/app/src/main/res/layout/fragment_device_cooker_control.xml
index e9a4533..8c6aed7 100644
--- a/app/src/main/res/layout/fragment_device_cooker_control.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_control.xml
@@ -31,7 +31,7 @@
android:id="@+id/turnOffRadioButton"
android:layout_width="@dimen/titleViewHeight"
android:layout_height="@dimen/titleViewHeight"
- android:background="@drawable/selector_turn_off_radio_button"
+ android:background="@drawable/selector_device_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/fragment_device_fireplace_control.xml b/app/src/main/res/layout/fragment_device_fireplace_control.xml
index 2b7fdc0..513982d 100644
--- a/app/src/main/res/layout/fragment_device_fireplace_control.xml
+++ b/app/src/main/res/layout/fragment_device_fireplace_control.xml
@@ -31,7 +31,7 @@
android:id="@+id/turnOffRadioButton"
android:layout_width="@dimen/titleViewHeight"
android:layout_height="@dimen/titleViewHeight"
- android:background="@drawable/selector_turn_off_radio_button"
+ android:background="@drawable/selector_device_turn_off"
android:button="@null"
android:gravity="center" />
@@ -44,6 +44,7 @@
android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/bg_solid_layout_white_radius_10"
android:orientation="vertical"
+ android:paddingHorizontal="@dimen/dp_20"
android:paddingVertical="@dimen/dp_10">
+ android:drawableTop="@drawable/selector_range_hood_low_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="舒适" />
+ android:drawableTop="@drawable/selector_range_hood_high_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="节能" />
+ android:drawableTop="@drawable/selector_range_hood_max_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="夏季" />
-
-
-
-
-
-
-
-
-
@@ -54,59 +54,38 @@
+ android:drawableTop="@drawable/selector_range_hood_low_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="低档" />
+ android:drawableTop="@drawable/selector_range_hood_high_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="高档" />
+ android:drawableTop="@drawable/selector_range_hood_max_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="爆炒" />
-
-
-
-
-
-
-
-
-
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_gas_consume.xml b/app/src/main/res/layout/activity_gas_consume.xml
index 9f0a836..cc916a1 100644
--- a/app/src/main/res/layout/activity_gas_consume.xml
+++ b/app/src/main/res/layout/activity_gas_consume.xml
@@ -229,7 +229,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:background="@drawable/selector_clear_water_check_box"
+ android:background="@drawable/selector_water_heater_clear_water"
android:button="@null" />
@@ -120,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -148,7 +148,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -175,7 +175,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_single_strip.xml b/app/src/main/res/layout/activity_single_strip.xml
index 8fc949d..455645e 100644
--- a/app/src/main/res/layout/activity_single_strip.xml
+++ b/app/src/main/res/layout/activity_single_strip.xml
@@ -24,7 +24,7 @@
android:id="@+id/turnOffCheckBox"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/selector_turn_off_single_strip"
+ android:background="@drawable/selector_single_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml
new file mode 100644
index 0000000..b3a661a
--- /dev/null
+++ b/app/src/main/res/layout/activity_water_dispenser.xml
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_device_cooker_control.xml b/app/src/main/res/layout/fragment_device_cooker_control.xml
index e9a4533..8c6aed7 100644
--- a/app/src/main/res/layout/fragment_device_cooker_control.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_control.xml
@@ -31,7 +31,7 @@
android:id="@+id/turnOffRadioButton"
android:layout_width="@dimen/titleViewHeight"
android:layout_height="@dimen/titleViewHeight"
- android:background="@drawable/selector_turn_off_radio_button"
+ android:background="@drawable/selector_device_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/fragment_device_fireplace_control.xml b/app/src/main/res/layout/fragment_device_fireplace_control.xml
index 2b7fdc0..513982d 100644
--- a/app/src/main/res/layout/fragment_device_fireplace_control.xml
+++ b/app/src/main/res/layout/fragment_device_fireplace_control.xml
@@ -31,7 +31,7 @@
android:id="@+id/turnOffRadioButton"
android:layout_width="@dimen/titleViewHeight"
android:layout_height="@dimen/titleViewHeight"
- android:background="@drawable/selector_turn_off_radio_button"
+ android:background="@drawable/selector_device_turn_off"
android:button="@null"
android:gravity="center" />
@@ -44,6 +44,7 @@
android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/bg_solid_layout_white_radius_10"
android:orientation="vertical"
+ android:paddingHorizontal="@dimen/dp_20"
android:paddingVertical="@dimen/dp_10">
+ android:drawableTop="@drawable/selector_range_hood_low_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="舒适" />
+ android:drawableTop="@drawable/selector_range_hood_high_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="节能" />
+ android:drawableTop="@drawable/selector_range_hood_max_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="夏季" />
-
-
-
-
-
-
-
-
-
@@ -54,59 +54,38 @@
+ android:drawableTop="@drawable/selector_range_hood_low_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="低档" />
+ android:drawableTop="@drawable/selector_range_hood_high_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="高档" />
+ android:drawableTop="@drawable/selector_range_hood_max_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="爆炒" />
-
-
-
-
-
-
-
-
-
@@ -261,81 +261,54 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
"火灾报警器"
"rqbj" -> "燃气报警器"
"cobj" -> "一氧化碳报警器"
+ "yinsj" -> "即热式台式饮水机"
else -> "其他"
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index 1bdd94d..fa90b52 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -174,6 +174,10 @@
//一氧化碳报警器
requireContext().navigatePageTo()
}
+ "yinsj" -> {
+ //即热式台式饮水机
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
}
}
diff --git a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
new file mode 100644
index 0000000..5185a18
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt
@@ -0,0 +1,268 @@
+package com.casic.br.view.device
+
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.casic.br.R
+import com.casic.br.extensions.*
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.casic.br.view.device.waterdispenser.WaterConfigActivity
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_water_dispenser.*
+import kotlinx.android.synthetic.main.activity_water_dispenser.modeRadioGroup
+import kotlinx.android.synthetic.main.fragment_device_waterheater_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 智能网关
+ * TODO 数据上报暂缓
+ * */
+class WaterDispenserActivity : KotlinBaseActivity() {
+
+ private val context: Context = this@WaterDispenserActivity
+ private lateinit var deviceId: String
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_water_dispenser
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = deviceBean.toChineseTypeName()
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .apply(RequestOptions.circleCropTransform())
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onDpUpdate: $dpStr")
+ //{"10":0,"101":29,"102":300,"103":false,"104":"300ml","105":"milk","106":true,"3":45,"7":30}
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ targetWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "7" -> {
+ //当前水温
+ }
+ "10" -> {
+ //故障
+ }
+ "101" -> {
+ //进水水温
+ importWaterTempView.text = String.format(
+ "${parseObject[it]}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+ "102" -> {}
+ "103" -> {
+ //出水开关
+ val switchState = parseObject[it] as Boolean
+ switchCheckBox.isChecked = switchState
+ }
+ "104" -> {
+ //出水量
+ outputWaterView.text = when (parseObject[it]) {
+ "wuxian" -> "无限"
+ else -> parseObject[it] as String
+ }
+ }
+ "105" -> {
+ //水温模式
+ waterModeView.text = when (parseObject[it]) {
+ "normal" -> "常温"
+ "milk" -> "冲牛奶"
+ "coffee" -> "冲咖啡"
+ "boiling_water" -> "开水"
+ else -> "自定义"
+ }
+
+ when (parseObject[it]) {
+ "normal" -> normalRadioButton.isChecked = true
+ "milk" -> milkRadioButton.isChecked = true
+ "coffee" -> coffeeRadioButton.isChecked = true
+ "boiling_water" -> boiledRadioButton.isChecked = true
+ else -> customRadioButton.isChecked = true
+ }
+ }
+ "106" -> {
+ childCheckBox.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次获取焦点都查询设备的开关机状态
+ CommandManager.getTuyaDp(deviceInstance, "1")
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d("Casic", "WaterDispenserActivity => onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
+ when (checkedId) {
+ R.id.normalRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("normal"))
+ }
+ R.id.milkRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("milk"))
+ }
+ R.id.coffeeRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("coffee"))
+ }
+ R.id.boiledRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("boiling_water"))
+ }
+ R.id.customRadioButton -> {
+ CommandManager.sendTuyaDp(deviceInstance, "105".createCommand("customize"))
+ }
+ }
+ }
+
+ childCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ //童锁状态下不能出水
+ switchCheckBox.isEnabled = false
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(true))
+ } else {
+ switchCheckBox.isEnabled = true
+ CommandManager.sendTuyaDp(deviceInstance, "106".createCommand(false))
+
+ switchCheckBox.setOnCheckedChangeListener { _, switchIsChecked ->
+ if (switchIsChecked) {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(true))
+ } else {
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(false))
+ }
+ }
+ }
+ }
+
+ settingsCheckBox.setOnClickListener {
+ navigatePageTo(deviceId)
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
index e221d61..05a735b 100644
--- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt
@@ -55,7 +55,6 @@
ImmersionBar.with(this).statusBarDarkFont(true).init()
leftBackView.setOnClickListener { finish() }
- titleView.text = intent.getStringExtra(Constant.INTENT_PARAM)
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
new file mode 100644
index 0000000..3653425
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/waterdispenser/WaterConfigActivity.kt
@@ -0,0 +1,153 @@
+package com.casic.br.view.device.waterdispenser
+
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.qmuiteam.qmui.widget.QMUISlider
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.activity_add_water_config.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import kotlin.math.abs
+
+class WaterConfigActivity : KotlinBaseActivity() {
+
+ private val minTemp = 40
+ private var maxTemp = 100
+ private var currentProgress = 0
+ private val volumeScope = intArrayOf(150, 300, 1000)
+ private var currentTimeProgress = 0
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_add_water_config
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ ImmerseStatusBarUtil.setColor(this, R.color.mainBackColor.convertColor(this))
+
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "即热式台式饮水机"
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ setTemperatureScope()
+ setVolumeScope()
+
+ CommandManager.getTuyaDp(deviceInstance, "3")
+ CommandManager.getTuyaDp(deviceInstance, "104")
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "3" -> {
+ //目标水温度
+ val tempValue = parseObject[it] as Int
+ currentTempView.text = String.format(
+ "$tempValue${resources.getString(R.string.temperature_unit)}"
+ )
+ //转为刻度
+ temperatureSlider.currentProgress = tempValue - minTemp
+ }
+ "104" -> {
+ //出水量
+ when (val volumeValue = parseObject[it] as String) {
+ "150ml" -> {
+ volumeSeekBar.currentProgress = 0
+ currentVolumeView.text = volumeValue
+ }
+ "300ml" -> {
+ volumeSeekBar.currentProgress = 1
+ currentVolumeView.text = volumeValue
+ }
+ else -> {
+ volumeSeekBar.currentProgress = 2
+ currentVolumeView.text = "无限"
+ }
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置温度范围
+ * */
+ private fun setTemperatureScope() {
+ temperatureSlider.tickCount = abs(maxTemp - minTemp)
+ temperatureSlider.currentProgress = currentProgress
+ currentTempView.text = String.format(
+ "${minTemp + currentProgress}${resources.getString(R.string.temperature_unit)}"
+ )
+ minTempView.text = minTemp.toString()
+ maxTempView.text = maxTemp.toString()
+ }
+
+ /**
+ * 设置出水量范围
+ * */
+ private fun setVolumeScope() {
+ volumeSeekBar.tickCount = volumeScope.size - 1
+ volumeSeekBar.currentProgress = currentTimeProgress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ minVolumeView.text = "${volumeScope.first()}"
+ maxVolumeView.text = "${volumeScope.last()}"
+ }
+
+ override fun initEvent() {
+ temperatureSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentProgress = progress
+ currentTempView.text = String.format(
+ "${minTemp + progress}${resources.getString(R.string.temperature_unit)}"
+ )
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTemp + progress)
+ )
+ }
+ })
+
+ volumeSeekBar.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ currentTimeProgress = progress
+ currentVolumeView.text = String.format("${volumeScope[currentTimeProgress]}mL")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "102".createCommand(volumeScope[currentTimeProgress])
+ )
+ }
+ })
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_gas_check_box.xml b/app/src/main/res/drawable/selector_clear_gas_check_box.xml
deleted file mode 100644
index 8654938..0000000
--- a/app/src/main/res/drawable/selector_clear_gas_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_clear_water_check_box.xml b/app/src/main/res/drawable/selector_clear_water_check_box.xml
deleted file mode 100644
index c9ee9e9..0000000
--- a/app/src/main/res/drawable/selector_clear_water_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_device_turn_off.xml b/app/src/main/res/drawable/selector_device_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_device_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_high_speed_radio_button.xml b/app/src/main/res/drawable/selector_high_speed_radio_button.xml
deleted file mode 100644
index c31bd2e..0000000
--- a/app/src/main/res/drawable/selector_high_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml b/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
deleted file mode 100644
index 9805d65..0000000
--- a/app/src/main/res/drawable/selector_initiate_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_low_speed_radio_button.xml b/app/src/main/res/drawable/selector_low_speed_radio_button.xml
deleted file mode 100644
index 440fe6d..0000000
--- a/app/src/main/res/drawable/selector_low_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_max_speed_radio_button.xml b/app/src/main/res/drawable/selector_max_speed_radio_button.xml
deleted file mode 100644
index 95f9fde..0000000
--- a/app/src/main/res/drawable/selector_max_speed_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_once_image_radio_button.xml b/app/src/main/res/drawable/selector_once_image_radio_button.xml
deleted file mode 100644
index fc936c6..0000000
--- a/app/src/main/res/drawable/selector_once_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_power_strip_turn_off.xml b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_power_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml b/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
deleted file mode 100644
index ba3bdd1..0000000
--- a/app/src/main/res/drawable/selector_pressure_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_high_speed.xml b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
new file mode 100644
index 0000000..c31bd2e
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_high_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_low_speed.xml b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
new file mode 100644
index 0000000..440fe6d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_low_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_range_hood_max_speed.xml b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
new file mode 100644
index 0000000..95f9fde
--- /dev/null
+++ b/app/src/main/res/drawable/selector_range_hood_max_speed.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml b/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
deleted file mode 100644
index 3f211ce..0000000
--- a/app/src/main/res/drawable/selector_reservation_image_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_single_strip_turn_off.xml b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
new file mode 100644
index 0000000..eb97bc9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_single_strip_turn_off.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_check_box.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_radio_button.xml b/app/src/main/res/drawable/selector_turn_off_radio_button.xml
deleted file mode 100644
index 3b719e1..0000000
--- a/app/src/main/res/drawable/selector_turn_off_radio_button.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml
deleted file mode 100644
index eb97bc9..0000000
--- a/app/src/main/res/drawable/selector_turn_off_single_strip.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_gas.xml b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
new file mode 100644
index 0000000..8654938
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_gas.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_clear_water.xml b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
new file mode 100644
index 0000000..c9ee9e9
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_clear_water.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_initiate.xml b/app/src/main/res/drawable/selector_water_heater_initiate.xml
new file mode 100644
index 0000000..9805d65
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_initiate.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_once.xml b/app/src/main/res/drawable/selector_water_heater_once.xml
new file mode 100644
index 0000000..fc936c6
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_once.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_pressure.xml b/app/src/main/res/drawable/selector_water_heater_pressure.xml
new file mode 100644
index 0000000..ba3bdd1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_pressure.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_water_heater_reservation.xml b/app/src/main/res/drawable/selector_water_heater_reservation.xml
new file mode 100644
index 0000000..3f211ce
--- /dev/null
+++ b/app/src/main/res/drawable/selector_water_heater_reservation.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_add_water_config.xml b/app/src/main/res/layout/activity_add_water_config.xml
new file mode 100644
index 0000000..84f7c76
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_water_config.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_gas_consume.xml b/app/src/main/res/layout/activity_gas_consume.xml
index 9f0a836..cc916a1 100644
--- a/app/src/main/res/layout/activity_gas_consume.xml
+++ b/app/src/main/res/layout/activity_gas_consume.xml
@@ -229,7 +229,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:background="@drawable/selector_clear_water_check_box"
+ android:background="@drawable/selector_water_heater_clear_water"
android:button="@null" />
@@ -120,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -148,7 +148,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
@@ -175,7 +175,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
- android:background="@drawable/selector_turn_off_check_box"
+ android:background="@drawable/selector_power_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_single_strip.xml b/app/src/main/res/layout/activity_single_strip.xml
index 8fc949d..455645e 100644
--- a/app/src/main/res/layout/activity_single_strip.xml
+++ b/app/src/main/res/layout/activity_single_strip.xml
@@ -24,7 +24,7 @@
android:id="@+id/turnOffCheckBox"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/selector_turn_off_single_strip"
+ android:background="@drawable/selector_single_strip_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml
new file mode 100644
index 0000000..b3a661a
--- /dev/null
+++ b/app/src/main/res/layout/activity_water_dispenser.xml
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_device_cooker_control.xml b/app/src/main/res/layout/fragment_device_cooker_control.xml
index e9a4533..8c6aed7 100644
--- a/app/src/main/res/layout/fragment_device_cooker_control.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_control.xml
@@ -31,7 +31,7 @@
android:id="@+id/turnOffRadioButton"
android:layout_width="@dimen/titleViewHeight"
android:layout_height="@dimen/titleViewHeight"
- android:background="@drawable/selector_turn_off_radio_button"
+ android:background="@drawable/selector_device_turn_off"
android:button="@null"
android:gravity="center" />
diff --git a/app/src/main/res/layout/fragment_device_fireplace_control.xml b/app/src/main/res/layout/fragment_device_fireplace_control.xml
index 2b7fdc0..513982d 100644
--- a/app/src/main/res/layout/fragment_device_fireplace_control.xml
+++ b/app/src/main/res/layout/fragment_device_fireplace_control.xml
@@ -31,7 +31,7 @@
android:id="@+id/turnOffRadioButton"
android:layout_width="@dimen/titleViewHeight"
android:layout_height="@dimen/titleViewHeight"
- android:background="@drawable/selector_turn_off_radio_button"
+ android:background="@drawable/selector_device_turn_off"
android:button="@null"
android:gravity="center" />
@@ -44,6 +44,7 @@
android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/bg_solid_layout_white_radius_10"
android:orientation="vertical"
+ android:paddingHorizontal="@dimen/dp_20"
android:paddingVertical="@dimen/dp_10">
+ android:drawableTop="@drawable/selector_range_hood_low_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="舒适" />
+ android:drawableTop="@drawable/selector_range_hood_high_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="节能" />
+ android:drawableTop="@drawable/selector_range_hood_max_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="夏季" />
-
-
-
-
-
-
-
-
-
@@ -54,59 +54,38 @@
+ android:drawableTop="@drawable/selector_range_hood_low_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="低档" />
+ android:drawableTop="@drawable/selector_range_hood_high_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="高档" />
+ android:drawableTop="@drawable/selector_range_hood_max_speed"
+ android:drawablePadding="@dimen/dp_5"
+ android:gravity="center"
+ android:text="爆炒" />
-
-
-
-
-
-
-
-
-
@@ -261,81 +261,54 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
100dp
115dp
125dp
+ 150dp
+ 175dp
200dp
220dp
300dp