diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" else -> "其他" } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt new file mode 100644 index 0000000..9552b0b --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt @@ -0,0 +1,53 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_robot_settings.* +import kotlinx.android.synthetic.main.include_left_back_title.* + +class RobotSettingsActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_settings + + 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() { + + } + + override fun initEvent() { + clearBatteryButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("是否清除记录?如果没有更换耗材而清除记录将会导致数据错误") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt new file mode 100644 index 0000000..9552b0b --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt @@ -0,0 +1,53 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_robot_settings.* +import kotlinx.android.synthetic.main.include_left_back_title.* + +class RobotSettingsActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_settings + + 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() { + + } + + override fun initEvent() { + clearBatteryButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("是否清除记录?如果没有更换耗材而清除记录将会导致数据错误") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + } +} \ 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 344af9a..b9202c9 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rootView" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:background="@mipmap/common_bkg" android:orientation="vertical"> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt new file mode 100644 index 0000000..9552b0b --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt @@ -0,0 +1,53 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_robot_settings.* +import kotlinx.android.synthetic.main.include_left_back_title.* + +class RobotSettingsActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_settings + + 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() { + + } + + override fun initEvent() { + clearBatteryButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("是否清除记录?如果没有更换耗材而清除记录将会导致数据错误") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + } +} \ 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 344af9a..b9202c9 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rootView" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:background="@mipmap/common_bkg" android:orientation="vertical"> diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml index 60f23df..f7d50e9 100644 --- a/app/src/main/res/layout/activity_power_strip.xml +++ b/app/src/main/res/layout/activity_power_strip.xml @@ -107,22 +107,15 @@ android:paddingHorizontal="@dimen/dp_20" android:paddingVertical="@dimen/dp_10"> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt new file mode 100644 index 0000000..9552b0b --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt @@ -0,0 +1,53 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_robot_settings.* +import kotlinx.android.synthetic.main.include_left_back_title.* + +class RobotSettingsActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_settings + + 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() { + + } + + override fun initEvent() { + clearBatteryButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("是否清除记录?如果没有更换耗材而清除记录将会导致数据错误") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + } +} \ 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 344af9a..b9202c9 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rootView" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:background="@mipmap/common_bkg" android:orientation="vertical"> diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml index 60f23df..f7d50e9 100644 --- a/app/src/main/res/layout/activity_power_strip.xml +++ b/app/src/main/res/layout/activity_power_strip.xml @@ -107,22 +107,15 @@ android:paddingHorizontal="@dimen/dp_20" android:paddingVertical="@dimen/dp_10"> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> diff --git a/app/src/main/res/layout/activity_robot_add_time.xml b/app/src/main/res/layout/activity_robot_add_time.xml new file mode 100644 index 0000000..eb996c0 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_add_time.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt new file mode 100644 index 0000000..9552b0b --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt @@ -0,0 +1,53 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_robot_settings.* +import kotlinx.android.synthetic.main.include_left_back_title.* + +class RobotSettingsActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_settings + + 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() { + + } + + override fun initEvent() { + clearBatteryButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("是否清除记录?如果没有更换耗材而清除记录将会导致数据错误") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + } +} \ 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 344af9a..b9202c9 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rootView" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:background="@mipmap/common_bkg" android:orientation="vertical"> diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml index 60f23df..f7d50e9 100644 --- a/app/src/main/res/layout/activity_power_strip.xml +++ b/app/src/main/res/layout/activity_power_strip.xml @@ -107,22 +107,15 @@ android:paddingHorizontal="@dimen/dp_20" android:paddingVertical="@dimen/dp_10"> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> diff --git a/app/src/main/res/layout/activity_robot_add_time.xml b/app/src/main/res/layout/activity_robot_add_time.xml new file mode 100644 index 0000000..eb996c0 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_add_time.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_robot_settings.xml b/app/src/main/res/layout/activity_robot_settings.xml new file mode 100644 index 0000000..018f2f8 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_settings.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt new file mode 100644 index 0000000..9552b0b --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt @@ -0,0 +1,53 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_robot_settings.* +import kotlinx.android.synthetic.main.include_left_back_title.* + +class RobotSettingsActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_settings + + 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() { + + } + + override fun initEvent() { + clearBatteryButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("是否清除记录?如果没有更换耗材而清除记录将会导致数据错误") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + } +} \ 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 344af9a..b9202c9 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rootView" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:background="@mipmap/common_bkg" android:orientation="vertical"> diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml index 60f23df..f7d50e9 100644 --- a/app/src/main/res/layout/activity_power_strip.xml +++ b/app/src/main/res/layout/activity_power_strip.xml @@ -107,22 +107,15 @@ android:paddingHorizontal="@dimen/dp_20" android:paddingVertical="@dimen/dp_10"> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> diff --git a/app/src/main/res/layout/activity_robot_add_time.xml b/app/src/main/res/layout/activity_robot_add_time.xml new file mode 100644 index 0000000..eb996c0 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_add_time.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_robot_settings.xml b/app/src/main/res/layout/activity_robot_settings.xml new file mode 100644 index 0000000..018f2f8 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_settings.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sweeping_robot.xml b/app/src/main/res/layout/activity_sweeping_robot.xml new file mode 100644 index 0000000..9968247 --- /dev/null +++ b/app/src/main/res/layout/activity_sweeping_robot.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2db3a08..4004755 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,9 @@ + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt new file mode 100644 index 0000000..9552b0b --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt @@ -0,0 +1,53 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_robot_settings.* +import kotlinx.android.synthetic.main.include_left_back_title.* + +class RobotSettingsActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_settings + + 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() { + + } + + override fun initEvent() { + clearBatteryButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("是否清除记录?如果没有更换耗材而清除记录将会导致数据错误") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + } +} \ 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 344af9a..b9202c9 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rootView" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:background="@mipmap/common_bkg" android:orientation="vertical"> diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml index 60f23df..f7d50e9 100644 --- a/app/src/main/res/layout/activity_power_strip.xml +++ b/app/src/main/res/layout/activity_power_strip.xml @@ -107,22 +107,15 @@ android:paddingHorizontal="@dimen/dp_20" android:paddingVertical="@dimen/dp_10"> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> diff --git a/app/src/main/res/layout/activity_robot_add_time.xml b/app/src/main/res/layout/activity_robot_add_time.xml new file mode 100644 index 0000000..eb996c0 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_add_time.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_robot_settings.xml b/app/src/main/res/layout/activity_robot_settings.xml new file mode 100644 index 0000000..018f2f8 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_settings.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sweeping_robot.xml b/app/src/main/res/layout/activity_sweeping_robot.xml new file mode 100644 index 0000000..9968247 --- /dev/null +++ b/app/src/main/res/layout/activity_sweeping_robot.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_device_rangehood_control.xml b/app/src/main/res/layout/fragment_device_rangehood_control.xml index 4fc8209..adf3d03 100644 --- a/app/src/main/res/layout/fragment_device_rangehood_control.xml +++ b/app/src/main/res/layout/fragment_device_rangehood_control.xml @@ -28,7 +28,7 @@ android:text="开关" android:textSize="@dimen/sp_16" /> - + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt new file mode 100644 index 0000000..9552b0b --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt @@ -0,0 +1,53 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_robot_settings.* +import kotlinx.android.synthetic.main.include_left_back_title.* + +class RobotSettingsActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_settings + + 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() { + + } + + override fun initEvent() { + clearBatteryButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("是否清除记录?如果没有更换耗材而清除记录将会导致数据错误") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + } +} \ 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 344af9a..b9202c9 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rootView" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:background="@mipmap/common_bkg" android:orientation="vertical"> diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml index 60f23df..f7d50e9 100644 --- a/app/src/main/res/layout/activity_power_strip.xml +++ b/app/src/main/res/layout/activity_power_strip.xml @@ -107,22 +107,15 @@ android:paddingHorizontal="@dimen/dp_20" android:paddingVertical="@dimen/dp_10"> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> diff --git a/app/src/main/res/layout/activity_robot_add_time.xml b/app/src/main/res/layout/activity_robot_add_time.xml new file mode 100644 index 0000000..eb996c0 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_add_time.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_robot_settings.xml b/app/src/main/res/layout/activity_robot_settings.xml new file mode 100644 index 0000000..018f2f8 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_settings.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sweeping_robot.xml b/app/src/main/res/layout/activity_sweeping_robot.xml new file mode 100644 index 0000000..9968247 --- /dev/null +++ b/app/src/main/res/layout/activity_sweeping_robot.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_device_rangehood_control.xml b/app/src/main/res/layout/fragment_device_rangehood_control.xml index 4fc8209..adf3d03 100644 --- a/app/src/main/res/layout/fragment_device_rangehood_control.xml +++ b/app/src/main/res/layout/fragment_device_rangehood_control.xml @@ -28,7 +28,7 @@ android:text="开关" android:textSize="@dimen/sp_16" /> - - + + + + context: Context, private val icons: IntArray, private val titles: Array ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt index fae6114..d38507a 100644 --- a/app/src/main/java/com/casic/br/extensions/String.kt +++ b/app/src/main/java/com/casic/br/extensions/String.kt @@ -127,6 +127,7 @@ "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" "kj" -> "空气净化器" + "sd" -> "智能扫地机器人" 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 a226546..98971ce 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -182,6 +182,10 @@ //空气净化器 requireContext().navigatePageTo(deviceModel.devId) } + "sd" -> { + //智能扫地机器人 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt index cad6d98..865e6a7 100644 --- a/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/rangehood/ControlPageFragment.kt @@ -40,24 +40,24 @@ override fun initEvent() { //开关机 turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) - } - - lowSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) } } - highSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) - } - } - - maxSpeedRadioButton.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + speedRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.lowSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("low")) + } + R.id.mediumSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("high")) + } + R.id.highSpeedRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "10".createCommand("strong")) + } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index 2a8c6e9..e0b0397 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -32,7 +32,6 @@ private var currentProgress = 0 private val timeScope = intArrayOf(30, 60, 120, 180) private var currentTimeProgress = 0 - private var isDeviceWorking = false override fun initLayoutView(): Int = R.layout.fragment_device_waterheater_control @@ -93,7 +92,11 @@ override fun initEvent() { turnOffRadioButton.setOnClickListener { - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(!isDeviceWorking)) + if (turnOffRadioButton.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } kitchenRadioButton.setOnClickListener { @@ -140,24 +143,21 @@ } }) - //单次 - onceRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(isChecked)) - } - - //点动 - initiateRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked)) - } - - //预约 - reservationRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(isChecked)) - } - - //增压 - pressureRadioButton.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(isChecked)) + functionRadioGroup.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.onceRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "101".createCommand(true)) + } + R.id.initiateRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(true)) + } + R.id.reservationRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "109".createCommand(true)) + } + R.id.pressureRadioButton -> { + CommandManager.sendTuyaDp(deviceInstance, "110".createCommand(true)) + } + } } //单次参数设定 @@ -182,8 +182,7 @@ parseObject.keys.forEach { when (it) { "1" -> {//开关机 - isDeviceWorking = parseObject[it] as Boolean - turnOffRadioButton.isChecked = isDeviceWorking + turnOffRadioButton.isChecked = parseObject[it] as Boolean } "2" -> { diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index aeb638b..e9ceee9 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -23,10 +23,8 @@ val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") val SHOP_PAGE_OPERATE = arrayOf("推荐", "智能厨房", "智能家居", "配件") val SERVER_IMAGE = intArrayOf( - R.drawable.ic_daifukuan, - R.drawable.ic_daifuwu, - R.drawable.ic_fuwuzhong, - R.drawable.ic_pingjia + R.drawable.ic_daifukuan, R.drawable.ic_daifuwu, + R.drawable.ic_fuwuzhong, R.drawable.ic_pingjia ) val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") val USER_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") @@ -37,6 +35,11 @@ val T_H_PAGE_TITLE = arrayOf("温度记录", "湿度记录") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + val ROBOT_FUNCTION_ARRAY = arrayOf("自动清扫", "定点清扫", "沿边打扫", "自动回充", "寻回", "定时", "清扫记录", "设置") + val ROBOT_FUNCTION_IMAGE = intArrayOf( + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, + R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu, R.drawable.ic_kefu + ) //TODO 模拟数据 val TEST_IMAGE = intArrayOf( 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 1d2618f..9a1c984 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 @@ -24,14 +24,6 @@ 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.* /** @@ -122,7 +114,7 @@ if (c) { turnOffRadioButton.disableView() modeRadioGroup.disableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -138,7 +130,7 @@ } else { turnOffRadioButton.enableView() modeRadioGroup.enableView( - normalRadioButton, + manualRadioButton, autoRadioButton, sleepRadioButton, potentRadioButton @@ -238,7 +230,7 @@ } 1 -> deviceInstance.removeDevice(object : IResultCallback { override fun onError(code: String?, error: String?) { - Log.d("Casic", "WaterDispenserActivity => onError: $error") + Log.d("Casic", "AirCleanerActivity => onError: $error") } override fun onSuccess() { diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt index 68a0785..09f0e3a 100644 --- a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -12,7 +12,6 @@ import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.pengxh.kt.lite.widget.dialog.BottomActionSheet @@ -60,13 +59,12 @@ "查询设备信息失败,请检查设备是否已离线".show(this) return } - Log.d(kTag, deviceBean.dps.toJson()) titleView.text = deviceBean.toChineseTypeName() deviceBean.dpName.entries.forEach { when (it.key) { - "1" -> firstNameView.text = it.value - "2" -> secondNameView.text = it.value - "3" -> thirdNameView.text = it.value + "1" -> firstTurnOffCheckBox.text = it.value + "2" -> secondTurnOffCheckBox.text = it.value + "3" -> thirdTurnOffCheckBox.text = it.value } } deviceBean.dps.entries.forEach { diff --git a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt index 4ea83fc..e613a61 100644 --- a/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -135,8 +135,12 @@ .build().show() } - turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> - CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + turnOffCheckBox.setOnClickListener { + if (turnOffCheckBox.isChecked) { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(true)) + } else { + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(false)) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt new file mode 100644 index 0000000..2abc2f3 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SweepingRobotActivity.kt @@ -0,0 +1,203 @@ +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.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.utils.CommandManager +import com.casic.br.utils.LocaleConstant +import com.casic.br.utils.TuyaDeviceListener +import com.casic.br.view.device.robot.RobotSettingsActivity +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_sweeping_robot.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 智能扫地机器人 + * TODO 数据上报暂缓 + * */ +class SweepingRobotActivity : KotlinBaseActivity() { + + private val context: Context = this@SweepingRobotActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_sweeping_robot + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + Log.d("Casic", "SweepingRobotActivity => initData: $deviceId") + 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() + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "SweepingRobotActivity => onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> {} + } + } + } + }) + + val robotGridAdapter = IconTextGridAdapter( + this, LocaleConstant.ROBOT_FUNCTION_IMAGE, LocaleConstant.ROBOT_FUNCTION_ARRAY + ) + functionRecyclerView.adapter = robotGridAdapter + robotGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> { + + } + 1 -> { + + } + 2 -> { + + } + 3 -> { + + } + 4 -> { + + } + 5 -> { + "此功能待后续完善".show(context) + } + 6 -> { + "此功能待后续完善".show(context) + } + 7 -> { + navigatePageTo() + } + } + } + }) + } + + 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", "SweepingRobotActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + 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/robot/AddTimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt new file mode 100644 index 0000000..532642f --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/AddTimeConfigActivity.kt @@ -0,0 +1,33 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_left_back_title.* + +class AddTimeConfigActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_add_time + + 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() { + + } + + override fun initEvent() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt new file mode 100644 index 0000000..9552b0b --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/robot/RobotSettingsActivity.kt @@ -0,0 +1,53 @@ +package com.casic.br.view.device.robot + +import com.casic.br.R +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.ImmerseStatusBarUtil +import com.pengxh.kt.lite.widget.dialog.AlertControlDialog +import kotlinx.android.synthetic.main.activity_robot_settings.* +import kotlinx.android.synthetic.main.include_left_back_title.* + +class RobotSettingsActivity : KotlinBaseActivity() { + + override fun initLayoutView(): Int = R.layout.activity_robot_settings + + 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() { + + } + + override fun initEvent() { + clearBatteryButton.setOnClickListener { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("是否清除记录?如果没有更换耗材而清除记录将会导致数据错误") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + } +} \ 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 344af9a..b9202c9 100644 --- a/app/src/main/res/layout/activity_air_cleaner.xml +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rootView" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:background="@mipmap/common_bkg" android:orientation="vertical"> diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml index 60f23df..f7d50e9 100644 --- a/app/src/main/res/layout/activity_power_strip.xml +++ b/app/src/main/res/layout/activity_power_strip.xml @@ -107,22 +107,15 @@ android:paddingHorizontal="@dimen/dp_20" android:paddingVertical="@dimen/dp_10"> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> - - + android:drawableBottom="@drawable/selector_power_strip_turn_off" + android:drawablePadding="@dimen/dp_10" + android:gravity="center" + android:text="@string/app_name" /> diff --git a/app/src/main/res/layout/activity_robot_add_time.xml b/app/src/main/res/layout/activity_robot_add_time.xml new file mode 100644 index 0000000..eb996c0 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_add_time.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_robot_settings.xml b/app/src/main/res/layout/activity_robot_settings.xml new file mode 100644 index 0000000..018f2f8 --- /dev/null +++ b/app/src/main/res/layout/activity_robot_settings.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sweeping_robot.xml b/app/src/main/res/layout/activity_sweeping_robot.xml new file mode 100644 index 0000000..9968247 --- /dev/null +++ b/app/src/main/res/layout/activity_sweeping_robot.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_device_rangehood_control.xml b/app/src/main/res/layout/fragment_device_rangehood_control.xml index 4fc8209..adf3d03 100644 --- a/app/src/main/res/layout/fragment_device_rangehood_control.xml +++ b/app/src/main/res/layout/fragment_device_rangehood_control.xml @@ -28,7 +28,7 @@ android:text="开关" android:textSize="@dimen/sp_16" /> - - #662483B3 #D3E6F0 #333333 - #626262 + #888888 #F7F7FA #CCCCCC #DDDDDD