diff --git a/app/src/main/java/com/casic/br/extensions/View.kt b/app/src/main/java/com/casic/br/extensions/View.kt new file mode 100644 index 0000000..d6723b6 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/View.kt @@ -0,0 +1,20 @@ +package com.casic.br.extensions + +import android.view.View +import com.casic.br.utils.LocaleConstant + +fun View.disableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_DISABLE + this.isEnabled = false + view.forEach { + it?.isEnabled = false + } +} + +fun View.enableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_ENABLE + this.isEnabled = true + view.forEach { + it?.isEnabled = true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/View.kt b/app/src/main/java/com/casic/br/extensions/View.kt new file mode 100644 index 0000000..d6723b6 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/View.kt @@ -0,0 +1,20 @@ +package com.casic.br.extensions + +import android.view.View +import com.casic.br.utils.LocaleConstant + +fun View.disableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_DISABLE + this.isEnabled = false + view.forEach { + it?.isEnabled = false + } +} + +fun View.enableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_ENABLE + this.isEnabled = true + view.forEach { + it?.isEnabled = true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt index 1bb5d99..e5ff21e 100644 --- a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt +++ b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt @@ -4,6 +4,7 @@ import android.view.ViewGroup import com.casic.br.utils.LocaleConstant +//TODO 后期整合到View扩展函数去 fun ViewGroup.disableLayout(vararg view: View) { this.alpha = LocaleConstant.VIEW_DISABLE this.isEnabled = false @@ -18,12 +19,4 @@ view.forEach { it.isEnabled = true } -} - -fun ViewGroup.disableView() { - this.isEnabled = false -} - -fun ViewGroup.enableView() { - this.isEnabled = true } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/View.kt b/app/src/main/java/com/casic/br/extensions/View.kt new file mode 100644 index 0000000..d6723b6 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/View.kt @@ -0,0 +1,20 @@ +package com.casic.br.extensions + +import android.view.View +import com.casic.br.utils.LocaleConstant + +fun View.disableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_DISABLE + this.isEnabled = false + view.forEach { + it?.isEnabled = false + } +} + +fun View.enableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_ENABLE + this.isEnabled = true + view.forEach { + it?.isEnabled = true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt index 1bb5d99..e5ff21e 100644 --- a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt +++ b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt @@ -4,6 +4,7 @@ import android.view.ViewGroup import com.casic.br.utils.LocaleConstant +//TODO 后期整合到View扩展函数去 fun ViewGroup.disableLayout(vararg view: View) { this.alpha = LocaleConstant.VIEW_DISABLE this.isEnabled = false @@ -18,12 +19,4 @@ view.forEach { it.isEnabled = true } -} - -fun ViewGroup.disableView() { - this.isEnabled = false -} - -fun ViewGroup.enableView() { - this.isEnabled = true } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt index 90c0880..1d2618f 100644 --- a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -3,15 +3,16 @@ 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.initLayoutImmersionBar -import com.casic.br.extensions.toChineseTypeName +import com.casic.br.extensions.* import com.casic.br.utils.CommandManager 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.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -23,6 +24,14 @@ import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.api.ITuyaOta import kotlinx.android.synthetic.main.activity_air_cleaner.* +import kotlinx.android.synthetic.main.activity_air_cleaner.deviceLogoView +import kotlinx.android.synthetic.main.activity_air_cleaner.highSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.lowSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.modeRadioGroup +import kotlinx.android.synthetic.main.activity_air_cleaner.rootView +import kotlinx.android.synthetic.main.activity_air_cleaner.turnOffRadioButton +import kotlinx.android.synthetic.main.activity_water_dispenser.* +import kotlinx.android.synthetic.main.fragment_device_rangehood_control.* import kotlinx.android.synthetic.main.include_device_title.* /** @@ -32,7 +41,6 @@ class AirCleanerActivity : KotlinBaseActivity() { private val context: Context = this@AirCleanerActivity - private lateinit var deviceId: String private lateinit var tuyaOTA: ITuyaOta private lateinit var deviceInstance: ITuyaDevice @@ -50,7 +58,7 @@ } override fun initData() { - deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) @@ -71,7 +79,120 @@ override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} - //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + //设备开关 + turnOffRadioButton.isChecked = parseObject[it] as Boolean + } + "2" -> { + //pm2.5 + particulateView.text = parseObject[it].toString() + } + "3" -> { + //模式 + when (parseObject[it]) { + "0" -> manualRadioButton.isChecked = true + "1" -> autoRadioButton.isChecked = true + "2" -> sleepRadioButton.isChecked = true + "3" -> potentRadioButton.isChecked = true + } + } + "4" -> { + //风速 + when (parseObject[it]) { + "1" -> lowSpeedRadioButton.isChecked = true + "2" -> mediumSpeedRadioButton.isChecked = true + "3" -> highSpeedRadioButton.isChecked = true + } + } + "5" -> { + //滤芯剩余量 + filterElementView.text = "${parseObject[it]}%" + } + "6" -> { + //负离子 + anionStatusSwitch.isChecked = parseObject[it] as Boolean + } + "7" -> { + //童锁 + val c = parseObject[it] as Boolean + childStatusSwitch.isChecked = c + if (c) { + turnOffRadioButton.disableView() + modeRadioGroup.disableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.disableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.disableView(anionStatusSwitch) + countDownLayout.disableView() + resetFilterLayout.disableView() + } else { + turnOffRadioButton.enableView() + modeRadioGroup.enableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.enableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.enableView(anionStatusSwitch) + countDownLayout.enableView() + resetFilterLayout.enableView() + } + } + "11" -> { + //滤芯复位 + } + "19" -> { + //倒计时 + } + "20" -> { + //倒计时剩余 + } + "22" -> { + //空气质量 + when (parseObject[it]) { + "1" -> { + airQualityView.text = "优" + airQualityView.setTextColor( + R.color.greenColor.convertColor( + context + ) + ) + } + "2" -> { + airQualityView.text = "良" + airQualityView.setTextColor( + R.color.mainThemeColor.convertColor( + context + ) + ) + } + else -> { + airQualityView.text = "差" + airQualityView.setTextColor( + R.color.redTextColor.convertColor( + context + ) + ) + } + } + } + } + } } }) } @@ -129,6 +250,103 @@ }) .build().show() } + + turnOffRadioButton.setOnClickListener { + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } + } + + modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.manualRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("0")) + } + R.id.autoRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("1")) + } + R.id.sleepRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("2")) + } + R.id.potentRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("3")) + } + } + } + + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("1")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("2")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("3")) + } + } + } + + anionStatusSwitch.setOnClickListener { + if (anionStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(false)) + } + } + + childStatusSwitch.setOnClickListener { + if (childStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(false)) + } + } + + countDownLayout.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("不设置定时", "1h", "2h", "4h", "8h")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + //cancle,1,2,3,4 + val value = when (position) { + 0 -> "cancle" + 1 -> "1" + 2 -> "2" + 3 -> "3" + 4 -> "4" + else -> "cancle" + } + CommandManager.sendTuyaDp(deviceInstance, "19".createCommand(value)) + } + }) + .build().show() + } + + resetFilterLayout.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("滤芯复位") + .setMessage("确定要复位滤芯么?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + CommandManager.sendTuyaDp(deviceInstance, "11".createCommand(true)) + } + }) + .build().show() + } } override fun onResume() { diff --git a/app/src/main/java/com/casic/br/extensions/View.kt b/app/src/main/java/com/casic/br/extensions/View.kt new file mode 100644 index 0000000..d6723b6 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/View.kt @@ -0,0 +1,20 @@ +package com.casic.br.extensions + +import android.view.View +import com.casic.br.utils.LocaleConstant + +fun View.disableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_DISABLE + this.isEnabled = false + view.forEach { + it?.isEnabled = false + } +} + +fun View.enableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_ENABLE + this.isEnabled = true + view.forEach { + it?.isEnabled = true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt index 1bb5d99..e5ff21e 100644 --- a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt +++ b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt @@ -4,6 +4,7 @@ import android.view.ViewGroup import com.casic.br.utils.LocaleConstant +//TODO 后期整合到View扩展函数去 fun ViewGroup.disableLayout(vararg view: View) { this.alpha = LocaleConstant.VIEW_DISABLE this.isEnabled = false @@ -18,12 +19,4 @@ view.forEach { it.isEnabled = true } -} - -fun ViewGroup.disableView() { - this.isEnabled = false -} - -fun ViewGroup.enableView() { - this.isEnabled = true } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt index 90c0880..1d2618f 100644 --- a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -3,15 +3,16 @@ 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.initLayoutImmersionBar -import com.casic.br.extensions.toChineseTypeName +import com.casic.br.extensions.* import com.casic.br.utils.CommandManager 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.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -23,6 +24,14 @@ import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.api.ITuyaOta import kotlinx.android.synthetic.main.activity_air_cleaner.* +import kotlinx.android.synthetic.main.activity_air_cleaner.deviceLogoView +import kotlinx.android.synthetic.main.activity_air_cleaner.highSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.lowSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.modeRadioGroup +import kotlinx.android.synthetic.main.activity_air_cleaner.rootView +import kotlinx.android.synthetic.main.activity_air_cleaner.turnOffRadioButton +import kotlinx.android.synthetic.main.activity_water_dispenser.* +import kotlinx.android.synthetic.main.fragment_device_rangehood_control.* import kotlinx.android.synthetic.main.include_device_title.* /** @@ -32,7 +41,6 @@ class AirCleanerActivity : KotlinBaseActivity() { private val context: Context = this@AirCleanerActivity - private lateinit var deviceId: String private lateinit var tuyaOTA: ITuyaOta private lateinit var deviceInstance: ITuyaDevice @@ -50,7 +58,7 @@ } override fun initData() { - deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) @@ -71,7 +79,120 @@ override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} - //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + //设备开关 + turnOffRadioButton.isChecked = parseObject[it] as Boolean + } + "2" -> { + //pm2.5 + particulateView.text = parseObject[it].toString() + } + "3" -> { + //模式 + when (parseObject[it]) { + "0" -> manualRadioButton.isChecked = true + "1" -> autoRadioButton.isChecked = true + "2" -> sleepRadioButton.isChecked = true + "3" -> potentRadioButton.isChecked = true + } + } + "4" -> { + //风速 + when (parseObject[it]) { + "1" -> lowSpeedRadioButton.isChecked = true + "2" -> mediumSpeedRadioButton.isChecked = true + "3" -> highSpeedRadioButton.isChecked = true + } + } + "5" -> { + //滤芯剩余量 + filterElementView.text = "${parseObject[it]}%" + } + "6" -> { + //负离子 + anionStatusSwitch.isChecked = parseObject[it] as Boolean + } + "7" -> { + //童锁 + val c = parseObject[it] as Boolean + childStatusSwitch.isChecked = c + if (c) { + turnOffRadioButton.disableView() + modeRadioGroup.disableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.disableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.disableView(anionStatusSwitch) + countDownLayout.disableView() + resetFilterLayout.disableView() + } else { + turnOffRadioButton.enableView() + modeRadioGroup.enableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.enableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.enableView(anionStatusSwitch) + countDownLayout.enableView() + resetFilterLayout.enableView() + } + } + "11" -> { + //滤芯复位 + } + "19" -> { + //倒计时 + } + "20" -> { + //倒计时剩余 + } + "22" -> { + //空气质量 + when (parseObject[it]) { + "1" -> { + airQualityView.text = "优" + airQualityView.setTextColor( + R.color.greenColor.convertColor( + context + ) + ) + } + "2" -> { + airQualityView.text = "良" + airQualityView.setTextColor( + R.color.mainThemeColor.convertColor( + context + ) + ) + } + else -> { + airQualityView.text = "差" + airQualityView.setTextColor( + R.color.redTextColor.convertColor( + context + ) + ) + } + } + } + } + } } }) } @@ -129,6 +250,103 @@ }) .build().show() } + + turnOffRadioButton.setOnClickListener { + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } + } + + modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.manualRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("0")) + } + R.id.autoRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("1")) + } + R.id.sleepRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("2")) + } + R.id.potentRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("3")) + } + } + } + + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("1")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("2")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("3")) + } + } + } + + anionStatusSwitch.setOnClickListener { + if (anionStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(false)) + } + } + + childStatusSwitch.setOnClickListener { + if (childStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(false)) + } + } + + countDownLayout.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("不设置定时", "1h", "2h", "4h", "8h")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + //cancle,1,2,3,4 + val value = when (position) { + 0 -> "cancle" + 1 -> "1" + 2 -> "2" + 3 -> "3" + 4 -> "4" + else -> "cancle" + } + CommandManager.sendTuyaDp(deviceInstance, "19".createCommand(value)) + } + }) + .build().show() + } + + resetFilterLayout.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("滤芯复位") + .setMessage("确定要复位滤芯么?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + CommandManager.sendTuyaDp(deviceInstance, "11".createCommand(true)) + } + }) + .build().show() + } } override fun onResume() { 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 index 5185a18..68de8bf 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt @@ -99,8 +99,7 @@ "102" -> {} "103" -> { //出水开关 - val switchState = parseObject[it] as Boolean - switchCheckBox.isChecked = switchState + switchCheckBox.isChecked = parseObject[it] as Boolean } "104" -> { //出水量 diff --git a/app/src/main/java/com/casic/br/extensions/View.kt b/app/src/main/java/com/casic/br/extensions/View.kt new file mode 100644 index 0000000..d6723b6 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/View.kt @@ -0,0 +1,20 @@ +package com.casic.br.extensions + +import android.view.View +import com.casic.br.utils.LocaleConstant + +fun View.disableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_DISABLE + this.isEnabled = false + view.forEach { + it?.isEnabled = false + } +} + +fun View.enableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_ENABLE + this.isEnabled = true + view.forEach { + it?.isEnabled = true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt index 1bb5d99..e5ff21e 100644 --- a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt +++ b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt @@ -4,6 +4,7 @@ import android.view.ViewGroup import com.casic.br.utils.LocaleConstant +//TODO 后期整合到View扩展函数去 fun ViewGroup.disableLayout(vararg view: View) { this.alpha = LocaleConstant.VIEW_DISABLE this.isEnabled = false @@ -18,12 +19,4 @@ view.forEach { it.isEnabled = true } -} - -fun ViewGroup.disableView() { - this.isEnabled = false -} - -fun ViewGroup.enableView() { - this.isEnabled = true } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt index 90c0880..1d2618f 100644 --- a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -3,15 +3,16 @@ 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.initLayoutImmersionBar -import com.casic.br.extensions.toChineseTypeName +import com.casic.br.extensions.* import com.casic.br.utils.CommandManager 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.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -23,6 +24,14 @@ import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.api.ITuyaOta import kotlinx.android.synthetic.main.activity_air_cleaner.* +import kotlinx.android.synthetic.main.activity_air_cleaner.deviceLogoView +import kotlinx.android.synthetic.main.activity_air_cleaner.highSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.lowSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.modeRadioGroup +import kotlinx.android.synthetic.main.activity_air_cleaner.rootView +import kotlinx.android.synthetic.main.activity_air_cleaner.turnOffRadioButton +import kotlinx.android.synthetic.main.activity_water_dispenser.* +import kotlinx.android.synthetic.main.fragment_device_rangehood_control.* import kotlinx.android.synthetic.main.include_device_title.* /** @@ -32,7 +41,6 @@ class AirCleanerActivity : KotlinBaseActivity() { private val context: Context = this@AirCleanerActivity - private lateinit var deviceId: String private lateinit var tuyaOTA: ITuyaOta private lateinit var deviceInstance: ITuyaDevice @@ -50,7 +58,7 @@ } override fun initData() { - deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) @@ -71,7 +79,120 @@ override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} - //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + //设备开关 + turnOffRadioButton.isChecked = parseObject[it] as Boolean + } + "2" -> { + //pm2.5 + particulateView.text = parseObject[it].toString() + } + "3" -> { + //模式 + when (parseObject[it]) { + "0" -> manualRadioButton.isChecked = true + "1" -> autoRadioButton.isChecked = true + "2" -> sleepRadioButton.isChecked = true + "3" -> potentRadioButton.isChecked = true + } + } + "4" -> { + //风速 + when (parseObject[it]) { + "1" -> lowSpeedRadioButton.isChecked = true + "2" -> mediumSpeedRadioButton.isChecked = true + "3" -> highSpeedRadioButton.isChecked = true + } + } + "5" -> { + //滤芯剩余量 + filterElementView.text = "${parseObject[it]}%" + } + "6" -> { + //负离子 + anionStatusSwitch.isChecked = parseObject[it] as Boolean + } + "7" -> { + //童锁 + val c = parseObject[it] as Boolean + childStatusSwitch.isChecked = c + if (c) { + turnOffRadioButton.disableView() + modeRadioGroup.disableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.disableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.disableView(anionStatusSwitch) + countDownLayout.disableView() + resetFilterLayout.disableView() + } else { + turnOffRadioButton.enableView() + modeRadioGroup.enableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.enableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.enableView(anionStatusSwitch) + countDownLayout.enableView() + resetFilterLayout.enableView() + } + } + "11" -> { + //滤芯复位 + } + "19" -> { + //倒计时 + } + "20" -> { + //倒计时剩余 + } + "22" -> { + //空气质量 + when (parseObject[it]) { + "1" -> { + airQualityView.text = "优" + airQualityView.setTextColor( + R.color.greenColor.convertColor( + context + ) + ) + } + "2" -> { + airQualityView.text = "良" + airQualityView.setTextColor( + R.color.mainThemeColor.convertColor( + context + ) + ) + } + else -> { + airQualityView.text = "差" + airQualityView.setTextColor( + R.color.redTextColor.convertColor( + context + ) + ) + } + } + } + } + } } }) } @@ -129,6 +250,103 @@ }) .build().show() } + + turnOffRadioButton.setOnClickListener { + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } + } + + modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.manualRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("0")) + } + R.id.autoRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("1")) + } + R.id.sleepRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("2")) + } + R.id.potentRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("3")) + } + } + } + + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("1")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("2")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("3")) + } + } + } + + anionStatusSwitch.setOnClickListener { + if (anionStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(false)) + } + } + + childStatusSwitch.setOnClickListener { + if (childStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(false)) + } + } + + countDownLayout.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("不设置定时", "1h", "2h", "4h", "8h")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + //cancle,1,2,3,4 + val value = when (position) { + 0 -> "cancle" + 1 -> "1" + 2 -> "2" + 3 -> "3" + 4 -> "4" + else -> "cancle" + } + CommandManager.sendTuyaDp(deviceInstance, "19".createCommand(value)) + } + }) + .build().show() + } + + resetFilterLayout.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("滤芯复位") + .setMessage("确定要复位滤芯么?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + CommandManager.sendTuyaDp(deviceInstance, "11".createCommand(true)) + } + }) + .build().show() + } } override fun onResume() { 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 index 5185a18..68de8bf 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt @@ -99,8 +99,7 @@ "102" -> {} "103" -> { //出水开关 - val switchState = parseObject[it] as Boolean - switchCheckBox.isChecked = switchState + switchCheckBox.isChecked = parseObject[it] as Boolean } "104" -> { //出水量 diff --git a/app/src/main/res/drawable/selector_air_cleaner_high.xml b/app/src/main/res/drawable/selector_air_cleaner_high.xml new file mode 100644 index 0000000..c31bd2e --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_high.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/View.kt b/app/src/main/java/com/casic/br/extensions/View.kt new file mode 100644 index 0000000..d6723b6 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/View.kt @@ -0,0 +1,20 @@ +package com.casic.br.extensions + +import android.view.View +import com.casic.br.utils.LocaleConstant + +fun View.disableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_DISABLE + this.isEnabled = false + view.forEach { + it?.isEnabled = false + } +} + +fun View.enableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_ENABLE + this.isEnabled = true + view.forEach { + it?.isEnabled = true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt index 1bb5d99..e5ff21e 100644 --- a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt +++ b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt @@ -4,6 +4,7 @@ import android.view.ViewGroup import com.casic.br.utils.LocaleConstant +//TODO 后期整合到View扩展函数去 fun ViewGroup.disableLayout(vararg view: View) { this.alpha = LocaleConstant.VIEW_DISABLE this.isEnabled = false @@ -18,12 +19,4 @@ view.forEach { it.isEnabled = true } -} - -fun ViewGroup.disableView() { - this.isEnabled = false -} - -fun ViewGroup.enableView() { - this.isEnabled = true } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt index 90c0880..1d2618f 100644 --- a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -3,15 +3,16 @@ 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.initLayoutImmersionBar -import com.casic.br.extensions.toChineseTypeName +import com.casic.br.extensions.* import com.casic.br.utils.CommandManager 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.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -23,6 +24,14 @@ import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.api.ITuyaOta import kotlinx.android.synthetic.main.activity_air_cleaner.* +import kotlinx.android.synthetic.main.activity_air_cleaner.deviceLogoView +import kotlinx.android.synthetic.main.activity_air_cleaner.highSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.lowSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.modeRadioGroup +import kotlinx.android.synthetic.main.activity_air_cleaner.rootView +import kotlinx.android.synthetic.main.activity_air_cleaner.turnOffRadioButton +import kotlinx.android.synthetic.main.activity_water_dispenser.* +import kotlinx.android.synthetic.main.fragment_device_rangehood_control.* import kotlinx.android.synthetic.main.include_device_title.* /** @@ -32,7 +41,6 @@ class AirCleanerActivity : KotlinBaseActivity() { private val context: Context = this@AirCleanerActivity - private lateinit var deviceId: String private lateinit var tuyaOTA: ITuyaOta private lateinit var deviceInstance: ITuyaDevice @@ -50,7 +58,7 @@ } override fun initData() { - deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) @@ -71,7 +79,120 @@ override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} - //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + //设备开关 + turnOffRadioButton.isChecked = parseObject[it] as Boolean + } + "2" -> { + //pm2.5 + particulateView.text = parseObject[it].toString() + } + "3" -> { + //模式 + when (parseObject[it]) { + "0" -> manualRadioButton.isChecked = true + "1" -> autoRadioButton.isChecked = true + "2" -> sleepRadioButton.isChecked = true + "3" -> potentRadioButton.isChecked = true + } + } + "4" -> { + //风速 + when (parseObject[it]) { + "1" -> lowSpeedRadioButton.isChecked = true + "2" -> mediumSpeedRadioButton.isChecked = true + "3" -> highSpeedRadioButton.isChecked = true + } + } + "5" -> { + //滤芯剩余量 + filterElementView.text = "${parseObject[it]}%" + } + "6" -> { + //负离子 + anionStatusSwitch.isChecked = parseObject[it] as Boolean + } + "7" -> { + //童锁 + val c = parseObject[it] as Boolean + childStatusSwitch.isChecked = c + if (c) { + turnOffRadioButton.disableView() + modeRadioGroup.disableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.disableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.disableView(anionStatusSwitch) + countDownLayout.disableView() + resetFilterLayout.disableView() + } else { + turnOffRadioButton.enableView() + modeRadioGroup.enableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.enableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.enableView(anionStatusSwitch) + countDownLayout.enableView() + resetFilterLayout.enableView() + } + } + "11" -> { + //滤芯复位 + } + "19" -> { + //倒计时 + } + "20" -> { + //倒计时剩余 + } + "22" -> { + //空气质量 + when (parseObject[it]) { + "1" -> { + airQualityView.text = "优" + airQualityView.setTextColor( + R.color.greenColor.convertColor( + context + ) + ) + } + "2" -> { + airQualityView.text = "良" + airQualityView.setTextColor( + R.color.mainThemeColor.convertColor( + context + ) + ) + } + else -> { + airQualityView.text = "差" + airQualityView.setTextColor( + R.color.redTextColor.convertColor( + context + ) + ) + } + } + } + } + } } }) } @@ -129,6 +250,103 @@ }) .build().show() } + + turnOffRadioButton.setOnClickListener { + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } + } + + modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.manualRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("0")) + } + R.id.autoRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("1")) + } + R.id.sleepRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("2")) + } + R.id.potentRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("3")) + } + } + } + + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("1")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("2")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("3")) + } + } + } + + anionStatusSwitch.setOnClickListener { + if (anionStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(false)) + } + } + + childStatusSwitch.setOnClickListener { + if (childStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(false)) + } + } + + countDownLayout.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("不设置定时", "1h", "2h", "4h", "8h")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + //cancle,1,2,3,4 + val value = when (position) { + 0 -> "cancle" + 1 -> "1" + 2 -> "2" + 3 -> "3" + 4 -> "4" + else -> "cancle" + } + CommandManager.sendTuyaDp(deviceInstance, "19".createCommand(value)) + } + }) + .build().show() + } + + resetFilterLayout.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("滤芯复位") + .setMessage("确定要复位滤芯么?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + CommandManager.sendTuyaDp(deviceInstance, "11".createCommand(true)) + } + }) + .build().show() + } } override fun onResume() { 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 index 5185a18..68de8bf 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt @@ -99,8 +99,7 @@ "102" -> {} "103" -> { //出水开关 - val switchState = parseObject[it] as Boolean - switchCheckBox.isChecked = switchState + switchCheckBox.isChecked = parseObject[it] as Boolean } "104" -> { //出水量 diff --git a/app/src/main/res/drawable/selector_air_cleaner_high.xml b/app/src/main/res/drawable/selector_air_cleaner_high.xml new file mode 100644 index 0000000..c31bd2e --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_high.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_air_cleaner_low.xml b/app/src/main/res/drawable/selector_air_cleaner_low.xml new file mode 100644 index 0000000..440fe6d --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_low.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/View.kt b/app/src/main/java/com/casic/br/extensions/View.kt new file mode 100644 index 0000000..d6723b6 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/View.kt @@ -0,0 +1,20 @@ +package com.casic.br.extensions + +import android.view.View +import com.casic.br.utils.LocaleConstant + +fun View.disableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_DISABLE + this.isEnabled = false + view.forEach { + it?.isEnabled = false + } +} + +fun View.enableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_ENABLE + this.isEnabled = true + view.forEach { + it?.isEnabled = true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt index 1bb5d99..e5ff21e 100644 --- a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt +++ b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt @@ -4,6 +4,7 @@ import android.view.ViewGroup import com.casic.br.utils.LocaleConstant +//TODO 后期整合到View扩展函数去 fun ViewGroup.disableLayout(vararg view: View) { this.alpha = LocaleConstant.VIEW_DISABLE this.isEnabled = false @@ -18,12 +19,4 @@ view.forEach { it.isEnabled = true } -} - -fun ViewGroup.disableView() { - this.isEnabled = false -} - -fun ViewGroup.enableView() { - this.isEnabled = true } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt index 90c0880..1d2618f 100644 --- a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -3,15 +3,16 @@ 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.initLayoutImmersionBar -import com.casic.br.extensions.toChineseTypeName +import com.casic.br.extensions.* import com.casic.br.utils.CommandManager 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.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -23,6 +24,14 @@ import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.api.ITuyaOta import kotlinx.android.synthetic.main.activity_air_cleaner.* +import kotlinx.android.synthetic.main.activity_air_cleaner.deviceLogoView +import kotlinx.android.synthetic.main.activity_air_cleaner.highSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.lowSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.modeRadioGroup +import kotlinx.android.synthetic.main.activity_air_cleaner.rootView +import kotlinx.android.synthetic.main.activity_air_cleaner.turnOffRadioButton +import kotlinx.android.synthetic.main.activity_water_dispenser.* +import kotlinx.android.synthetic.main.fragment_device_rangehood_control.* import kotlinx.android.synthetic.main.include_device_title.* /** @@ -32,7 +41,6 @@ class AirCleanerActivity : KotlinBaseActivity() { private val context: Context = this@AirCleanerActivity - private lateinit var deviceId: String private lateinit var tuyaOTA: ITuyaOta private lateinit var deviceInstance: ITuyaDevice @@ -50,7 +58,7 @@ } override fun initData() { - deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) @@ -71,7 +79,120 @@ override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} - //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + //设备开关 + turnOffRadioButton.isChecked = parseObject[it] as Boolean + } + "2" -> { + //pm2.5 + particulateView.text = parseObject[it].toString() + } + "3" -> { + //模式 + when (parseObject[it]) { + "0" -> manualRadioButton.isChecked = true + "1" -> autoRadioButton.isChecked = true + "2" -> sleepRadioButton.isChecked = true + "3" -> potentRadioButton.isChecked = true + } + } + "4" -> { + //风速 + when (parseObject[it]) { + "1" -> lowSpeedRadioButton.isChecked = true + "2" -> mediumSpeedRadioButton.isChecked = true + "3" -> highSpeedRadioButton.isChecked = true + } + } + "5" -> { + //滤芯剩余量 + filterElementView.text = "${parseObject[it]}%" + } + "6" -> { + //负离子 + anionStatusSwitch.isChecked = parseObject[it] as Boolean + } + "7" -> { + //童锁 + val c = parseObject[it] as Boolean + childStatusSwitch.isChecked = c + if (c) { + turnOffRadioButton.disableView() + modeRadioGroup.disableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.disableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.disableView(anionStatusSwitch) + countDownLayout.disableView() + resetFilterLayout.disableView() + } else { + turnOffRadioButton.enableView() + modeRadioGroup.enableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.enableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.enableView(anionStatusSwitch) + countDownLayout.enableView() + resetFilterLayout.enableView() + } + } + "11" -> { + //滤芯复位 + } + "19" -> { + //倒计时 + } + "20" -> { + //倒计时剩余 + } + "22" -> { + //空气质量 + when (parseObject[it]) { + "1" -> { + airQualityView.text = "优" + airQualityView.setTextColor( + R.color.greenColor.convertColor( + context + ) + ) + } + "2" -> { + airQualityView.text = "良" + airQualityView.setTextColor( + R.color.mainThemeColor.convertColor( + context + ) + ) + } + else -> { + airQualityView.text = "差" + airQualityView.setTextColor( + R.color.redTextColor.convertColor( + context + ) + ) + } + } + } + } + } } }) } @@ -129,6 +250,103 @@ }) .build().show() } + + turnOffRadioButton.setOnClickListener { + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } + } + + modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.manualRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("0")) + } + R.id.autoRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("1")) + } + R.id.sleepRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("2")) + } + R.id.potentRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("3")) + } + } + } + + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("1")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("2")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("3")) + } + } + } + + anionStatusSwitch.setOnClickListener { + if (anionStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(false)) + } + } + + childStatusSwitch.setOnClickListener { + if (childStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(false)) + } + } + + countDownLayout.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("不设置定时", "1h", "2h", "4h", "8h")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + //cancle,1,2,3,4 + val value = when (position) { + 0 -> "cancle" + 1 -> "1" + 2 -> "2" + 3 -> "3" + 4 -> "4" + else -> "cancle" + } + CommandManager.sendTuyaDp(deviceInstance, "19".createCommand(value)) + } + }) + .build().show() + } + + resetFilterLayout.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("滤芯复位") + .setMessage("确定要复位滤芯么?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + CommandManager.sendTuyaDp(deviceInstance, "11".createCommand(true)) + } + }) + .build().show() + } } override fun onResume() { 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 index 5185a18..68de8bf 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt @@ -99,8 +99,7 @@ "102" -> {} "103" -> { //出水开关 - val switchState = parseObject[it] as Boolean - switchCheckBox.isChecked = switchState + switchCheckBox.isChecked = parseObject[it] as Boolean } "104" -> { //出水量 diff --git a/app/src/main/res/drawable/selector_air_cleaner_high.xml b/app/src/main/res/drawable/selector_air_cleaner_high.xml new file mode 100644 index 0000000..c31bd2e --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_high.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_air_cleaner_low.xml b/app/src/main/res/drawable/selector_air_cleaner_low.xml new file mode 100644 index 0000000..440fe6d --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_low.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_air_cleaner_medium.xml b/app/src/main/res/drawable/selector_air_cleaner_medium.xml new file mode 100644 index 0000000..8e7f40f --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_medium.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/View.kt b/app/src/main/java/com/casic/br/extensions/View.kt new file mode 100644 index 0000000..d6723b6 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/View.kt @@ -0,0 +1,20 @@ +package com.casic.br.extensions + +import android.view.View +import com.casic.br.utils.LocaleConstant + +fun View.disableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_DISABLE + this.isEnabled = false + view.forEach { + it?.isEnabled = false + } +} + +fun View.enableView(vararg view: View?) { + this.alpha = LocaleConstant.VIEW_ENABLE + this.isEnabled = true + view.forEach { + it?.isEnabled = true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt index 1bb5d99..e5ff21e 100644 --- a/app/src/main/java/com/casic/br/extensions/ViewGroup.kt +++ b/app/src/main/java/com/casic/br/extensions/ViewGroup.kt @@ -4,6 +4,7 @@ import android.view.ViewGroup import com.casic.br.utils.LocaleConstant +//TODO 后期整合到View扩展函数去 fun ViewGroup.disableLayout(vararg view: View) { this.alpha = LocaleConstant.VIEW_DISABLE this.isEnabled = false @@ -18,12 +19,4 @@ view.forEach { it.isEnabled = true } -} - -fun ViewGroup.disableView() { - this.isEnabled = false -} - -fun ViewGroup.enableView() { - this.isEnabled = true } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt index 90c0880..1d2618f 100644 --- a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -3,15 +3,16 @@ 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.initLayoutImmersionBar -import com.casic.br.extensions.toChineseTypeName +import com.casic.br.extensions.* import com.casic.br.utils.CommandManager 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.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog @@ -23,6 +24,14 @@ import com.tuya.smart.sdk.api.ITuyaDevice import com.tuya.smart.sdk.api.ITuyaOta import kotlinx.android.synthetic.main.activity_air_cleaner.* +import kotlinx.android.synthetic.main.activity_air_cleaner.deviceLogoView +import kotlinx.android.synthetic.main.activity_air_cleaner.highSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.lowSpeedRadioButton +import kotlinx.android.synthetic.main.activity_air_cleaner.modeRadioGroup +import kotlinx.android.synthetic.main.activity_air_cleaner.rootView +import kotlinx.android.synthetic.main.activity_air_cleaner.turnOffRadioButton +import kotlinx.android.synthetic.main.activity_water_dispenser.* +import kotlinx.android.synthetic.main.fragment_device_rangehood_control.* import kotlinx.android.synthetic.main.include_device_title.* /** @@ -32,7 +41,6 @@ class AirCleanerActivity : KotlinBaseActivity() { private val context: Context = this@AirCleanerActivity - private lateinit var deviceId: String private lateinit var tuyaOTA: ITuyaOta private lateinit var deviceInstance: ITuyaDevice @@ -50,7 +58,7 @@ } override fun initData() { - deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) @@ -71,7 +79,120 @@ override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} - //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + //设备开关 + turnOffRadioButton.isChecked = parseObject[it] as Boolean + } + "2" -> { + //pm2.5 + particulateView.text = parseObject[it].toString() + } + "3" -> { + //模式 + when (parseObject[it]) { + "0" -> manualRadioButton.isChecked = true + "1" -> autoRadioButton.isChecked = true + "2" -> sleepRadioButton.isChecked = true + "3" -> potentRadioButton.isChecked = true + } + } + "4" -> { + //风速 + when (parseObject[it]) { + "1" -> lowSpeedRadioButton.isChecked = true + "2" -> mediumSpeedRadioButton.isChecked = true + "3" -> highSpeedRadioButton.isChecked = true + } + } + "5" -> { + //滤芯剩余量 + filterElementView.text = "${parseObject[it]}%" + } + "6" -> { + //负离子 + anionStatusSwitch.isChecked = parseObject[it] as Boolean + } + "7" -> { + //童锁 + val c = parseObject[it] as Boolean + childStatusSwitch.isChecked = c + if (c) { + turnOffRadioButton.disableView() + modeRadioGroup.disableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.disableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.disableView(anionStatusSwitch) + countDownLayout.disableView() + resetFilterLayout.disableView() + } else { + turnOffRadioButton.enableView() + modeRadioGroup.enableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.enableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.enableView(anionStatusSwitch) + countDownLayout.enableView() + resetFilterLayout.enableView() + } + } + "11" -> { + //滤芯复位 + } + "19" -> { + //倒计时 + } + "20" -> { + //倒计时剩余 + } + "22" -> { + //空气质量 + when (parseObject[it]) { + "1" -> { + airQualityView.text = "优" + airQualityView.setTextColor( + R.color.greenColor.convertColor( + context + ) + ) + } + "2" -> { + airQualityView.text = "良" + airQualityView.setTextColor( + R.color.mainThemeColor.convertColor( + context + ) + ) + } + else -> { + airQualityView.text = "差" + airQualityView.setTextColor( + R.color.redTextColor.convertColor( + context + ) + ) + } + } + } + } + } } }) } @@ -129,6 +250,103 @@ }) .build().show() } + + turnOffRadioButton.setOnClickListener { + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } + } + + modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.manualRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("0")) + } + R.id.autoRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("1")) + } + R.id.sleepRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("2")) + } + R.id.potentRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("3")) + } + } + } + + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("1")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("2")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("3")) + } + } + } + + anionStatusSwitch.setOnClickListener { + if (anionStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(false)) + } + } + + childStatusSwitch.setOnClickListener { + if (childStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(false)) + } + } + + countDownLayout.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("不设置定时", "1h", "2h", "4h", "8h")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + //cancle,1,2,3,4 + val value = when (position) { + 0 -> "cancle" + 1 -> "1" + 2 -> "2" + 3 -> "3" + 4 -> "4" + else -> "cancle" + } + CommandManager.sendTuyaDp(deviceInstance, "19".createCommand(value)) + } + }) + .build().show() + } + + resetFilterLayout.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("滤芯复位") + .setMessage("确定要复位滤芯么?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + CommandManager.sendTuyaDp(deviceInstance, "11".createCommand(true)) + } + }) + .build().show() + } } override fun onResume() { 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 index 5185a18..68de8bf 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt @@ -99,8 +99,7 @@ "102" -> {} "103" -> { //出水开关 - val switchState = parseObject[it] as Boolean - switchCheckBox.isChecked = switchState + switchCheckBox.isChecked = parseObject[it] as Boolean } "104" -> { //出水量 diff --git a/app/src/main/res/drawable/selector_air_cleaner_high.xml b/app/src/main/res/drawable/selector_air_cleaner_high.xml new file mode 100644 index 0000000..c31bd2e --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_high.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_air_cleaner_low.xml b/app/src/main/res/drawable/selector_air_cleaner_low.xml new file mode 100644 index 0000000..440fe6d --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_low.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_air_cleaner_medium.xml b/app/src/main/res/drawable/selector_air_cleaner_medium.xml new file mode 100644 index 0000000..8e7f40f --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_medium.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml index bb137e8..344af9a 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -72,7 +72,7 @@ android:textColor="@color/hintTextColor" /> @@ -222,7 +223,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_heater_initiate" + android:drawableTop="@drawable/selector_air_cleaner_medium" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="中速" /> @@ -233,7 +234,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_heater_reservation" + android:drawableTop="@drawable/selector_air_cleaner_high" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="高速" /> @@ -249,6 +250,7 @@ android:orientation="horizontal"> onDpUpdate: $dpStr") //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} - //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + //设备开关 + turnOffRadioButton.isChecked = parseObject[it] as Boolean + } + "2" -> { + //pm2.5 + particulateView.text = parseObject[it].toString() + } + "3" -> { + //模式 + when (parseObject[it]) { + "0" -> manualRadioButton.isChecked = true + "1" -> autoRadioButton.isChecked = true + "2" -> sleepRadioButton.isChecked = true + "3" -> potentRadioButton.isChecked = true + } + } + "4" -> { + //风速 + when (parseObject[it]) { + "1" -> lowSpeedRadioButton.isChecked = true + "2" -> mediumSpeedRadioButton.isChecked = true + "3" -> highSpeedRadioButton.isChecked = true + } + } + "5" -> { + //滤芯剩余量 + filterElementView.text = "${parseObject[it]}%" + } + "6" -> { + //负离子 + anionStatusSwitch.isChecked = parseObject[it] as Boolean + } + "7" -> { + //童锁 + val c = parseObject[it] as Boolean + childStatusSwitch.isChecked = c + if (c) { + turnOffRadioButton.disableView() + modeRadioGroup.disableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.disableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.disableView(anionStatusSwitch) + countDownLayout.disableView() + resetFilterLayout.disableView() + } else { + turnOffRadioButton.enableView() + modeRadioGroup.enableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.enableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.enableView(anionStatusSwitch) + countDownLayout.enableView() + resetFilterLayout.enableView() + } + } + "11" -> { + //滤芯复位 + } + "19" -> { + //倒计时 + } + "20" -> { + //倒计时剩余 + } + "22" -> { + //空气质量 + when (parseObject[it]) { + "1" -> { + airQualityView.text = "优" + airQualityView.setTextColor( + R.color.greenColor.convertColor( + context + ) + ) + } + "2" -> { + airQualityView.text = "良" + airQualityView.setTextColor( + R.color.mainThemeColor.convertColor( + context + ) + ) + } + else -> { + airQualityView.text = "差" + airQualityView.setTextColor( + R.color.redTextColor.convertColor( + context + ) + ) + } + } + } + } + } } }) } @@ -129,6 +250,103 @@ }) .build().show() } + + turnOffRadioButton.setOnClickListener { + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } + } + + modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.manualRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("0")) + } + R.id.autoRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("1")) + } + R.id.sleepRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("2")) + } + R.id.potentRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("3")) + } + } + } + + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("1")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("2")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("3")) + } + } + } + + anionStatusSwitch.setOnClickListener { + if (anionStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(false)) + } + } + + childStatusSwitch.setOnClickListener { + if (childStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(false)) + } + } + + countDownLayout.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("不设置定时", "1h", "2h", "4h", "8h")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + //cancle,1,2,3,4 + val value = when (position) { + 0 -> "cancle" + 1 -> "1" + 2 -> "2" + 3 -> "3" + 4 -> "4" + else -> "cancle" + } + CommandManager.sendTuyaDp(deviceInstance, "19".createCommand(value)) + } + }) + .build().show() + } + + resetFilterLayout.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("滤芯复位") + .setMessage("确定要复位滤芯么?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + CommandManager.sendTuyaDp(deviceInstance, "11".createCommand(true)) + } + }) + .build().show() + } } override fun onResume() { 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 index 5185a18..68de8bf 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt @@ -99,8 +99,7 @@ "102" -> {} "103" -> { //出水开关 - val switchState = parseObject[it] as Boolean - switchCheckBox.isChecked = switchState + switchCheckBox.isChecked = parseObject[it] as Boolean } "104" -> { //出水量 diff --git a/app/src/main/res/drawable/selector_air_cleaner_high.xml b/app/src/main/res/drawable/selector_air_cleaner_high.xml new file mode 100644 index 0000000..c31bd2e --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_high.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_air_cleaner_low.xml b/app/src/main/res/drawable/selector_air_cleaner_low.xml new file mode 100644 index 0000000..440fe6d --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_low.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_air_cleaner_medium.xml b/app/src/main/res/drawable/selector_air_cleaner_medium.xml new file mode 100644 index 0000000..8e7f40f --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_medium.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml index bb137e8..344af9a 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -72,7 +72,7 @@ android:textColor="@color/hintTextColor" /> @@ -222,7 +223,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_heater_initiate" + android:drawableTop="@drawable/selector_air_cleaner_medium" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="中速" /> @@ -233,7 +234,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_heater_reservation" + android:drawableTop="@drawable/selector_air_cleaner_high" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="高速" /> @@ -249,6 +250,7 @@ android:orientation="horizontal"> onDpUpdate: $dpStr") //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} - //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + //设备开关 + turnOffRadioButton.isChecked = parseObject[it] as Boolean + } + "2" -> { + //pm2.5 + particulateView.text = parseObject[it].toString() + } + "3" -> { + //模式 + when (parseObject[it]) { + "0" -> manualRadioButton.isChecked = true + "1" -> autoRadioButton.isChecked = true + "2" -> sleepRadioButton.isChecked = true + "3" -> potentRadioButton.isChecked = true + } + } + "4" -> { + //风速 + when (parseObject[it]) { + "1" -> lowSpeedRadioButton.isChecked = true + "2" -> mediumSpeedRadioButton.isChecked = true + "3" -> highSpeedRadioButton.isChecked = true + } + } + "5" -> { + //滤芯剩余量 + filterElementView.text = "${parseObject[it]}%" + } + "6" -> { + //负离子 + anionStatusSwitch.isChecked = parseObject[it] as Boolean + } + "7" -> { + //童锁 + val c = parseObject[it] as Boolean + childStatusSwitch.isChecked = c + if (c) { + turnOffRadioButton.disableView() + modeRadioGroup.disableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.disableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.disableView(anionStatusSwitch) + countDownLayout.disableView() + resetFilterLayout.disableView() + } else { + turnOffRadioButton.enableView() + modeRadioGroup.enableView( + normalRadioButton, + autoRadioButton, + sleepRadioButton, + potentRadioButton + ) + speedRadioGroup.enableView( + lowSpeedRadioButton, + mediumSpeedRadioButton, + highSpeedRadioButton + ) + anionLayout.enableView(anionStatusSwitch) + countDownLayout.enableView() + resetFilterLayout.enableView() + } + } + "11" -> { + //滤芯复位 + } + "19" -> { + //倒计时 + } + "20" -> { + //倒计时剩余 + } + "22" -> { + //空气质量 + when (parseObject[it]) { + "1" -> { + airQualityView.text = "优" + airQualityView.setTextColor( + R.color.greenColor.convertColor( + context + ) + ) + } + "2" -> { + airQualityView.text = "良" + airQualityView.setTextColor( + R.color.mainThemeColor.convertColor( + context + ) + ) + } + else -> { + airQualityView.text = "差" + airQualityView.setTextColor( + R.color.redTextColor.convertColor( + context + ) + ) + } + } + } + } + } } }) } @@ -129,6 +250,103 @@ }) .build().show() } + + turnOffRadioButton.setOnClickListener { + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } + } + + modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.manualRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("0")) + } + R.id.autoRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("1")) + } + R.id.sleepRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("2")) + } + R.id.potentRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand("3")) + } + } + } + + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("1")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("2")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "4".createCommand("3")) + } + } + } + + anionStatusSwitch.setOnClickListener { + if (anionStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "6".createCommand(false)) + } + } + + childStatusSwitch.setOnClickListener { + if (childStatusSwitch.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "7".createCommand(false)) + } + } + + countDownLayout.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("不设置定时", "1h", "2h", "4h", "8h")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + //cancle,1,2,3,4 + val value = when (position) { + 0 -> "cancle" + 1 -> "1" + 2 -> "2" + 3 -> "3" + 4 -> "4" + else -> "cancle" + } + CommandManager.sendTuyaDp(deviceInstance, "19".createCommand(value)) + } + }) + .build().show() + } + + resetFilterLayout.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("滤芯复位") + .setMessage("确定要复位滤芯么?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + CommandManager.sendTuyaDp(deviceInstance, "11".createCommand(true)) + } + }) + .build().show() + } } override fun onResume() { 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 index 5185a18..68de8bf 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterDispenserActivity.kt @@ -99,8 +99,7 @@ "102" -> {} "103" -> { //出水开关 - val switchState = parseObject[it] as Boolean - switchCheckBox.isChecked = switchState + switchCheckBox.isChecked = parseObject[it] as Boolean } "104" -> { //出水量 diff --git a/app/src/main/res/drawable/selector_air_cleaner_high.xml b/app/src/main/res/drawable/selector_air_cleaner_high.xml new file mode 100644 index 0000000..c31bd2e --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_high.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_air_cleaner_low.xml b/app/src/main/res/drawable/selector_air_cleaner_low.xml new file mode 100644 index 0000000..440fe6d --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_low.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_air_cleaner_medium.xml b/app/src/main/res/drawable/selector_air_cleaner_medium.xml new file mode 100644 index 0000000..8e7f40f --- /dev/null +++ b/app/src/main/res/drawable/selector_air_cleaner_medium.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml index bb137e8..344af9a 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -72,7 +72,7 @@ android:textColor="@color/hintTextColor" /> @@ -222,7 +223,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_heater_initiate" + android:drawableTop="@drawable/selector_air_cleaner_medium" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="中速" /> @@ -233,7 +234,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_heater_reservation" + android:drawableTop="@drawable/selector_air_cleaner_high" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="高速" /> @@ -249,6 +250,7 @@ android:orientation="horizontal">