diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt index 405184e..d853d48 100644 --- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt @@ -34,7 +34,7 @@ import java.util.* /** - * 灶具 + * 燃气灶 * */ class CookerActivity : KotlinBaseActivity() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt index 405184e..d853d48 100644 --- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt @@ -34,7 +34,7 @@ import java.util.* /** - * 灶具 + * 燃气灶 * */ class CookerActivity : KotlinBaseActivity() { 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 new file mode 100644 index 0000000..344ac9a --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -0,0 +1,233 @@ +package com.casic.br.view.device + +import android.graphics.Color +import android.util.Log +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.createCommand +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.utils.CommandManager +import com.casic.br.utils.TuyaDeviceListener +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.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 +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_cooker.* +import kotlinx.android.synthetic.main.activity_power_strip.* +import kotlinx.android.synthetic.main.activity_power_strip.rootView +import kotlinx.android.synthetic.main.fragment_device_cooker_control.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 电源插排 + * TODO 数据上报暂缓 + * */ +class PowerStripActivity : KotlinBaseActivity() { + + private val context = this@PowerStripActivity + private val kTag = "PowerStripActivity" + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_power_strip + + 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)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + Log.d(kTag, deviceBean.dps.toJson()) + deviceBean.dpName.entries.forEach { + when (it.key) { + "1" -> firstNameView.text = it.value + "2" -> secondNameView.text = it.value + "3" -> thirdNameView.text = it.value + } + } + deviceBean.dps.entries.forEach { + when (it.key) { + "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean + "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean + "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean + } + } + turnOffCheckBox.isChecked = + firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked + + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "2" -> { + secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "3" -> { + thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + } + } + } + }) + } + + 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(kTag, "onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + + turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + + firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + } + + secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + } + + thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + } + + 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 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt index 405184e..d853d48 100644 --- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt @@ -34,7 +34,7 @@ import java.util.* /** - * 灶具 + * 燃气灶 * */ class CookerActivity : KotlinBaseActivity() { 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 new file mode 100644 index 0000000..344ac9a --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -0,0 +1,233 @@ +package com.casic.br.view.device + +import android.graphics.Color +import android.util.Log +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.createCommand +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.utils.CommandManager +import com.casic.br.utils.TuyaDeviceListener +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.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 +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_cooker.* +import kotlinx.android.synthetic.main.activity_power_strip.* +import kotlinx.android.synthetic.main.activity_power_strip.rootView +import kotlinx.android.synthetic.main.fragment_device_cooker_control.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 电源插排 + * TODO 数据上报暂缓 + * */ +class PowerStripActivity : KotlinBaseActivity() { + + private val context = this@PowerStripActivity + private val kTag = "PowerStripActivity" + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_power_strip + + 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)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + Log.d(kTag, deviceBean.dps.toJson()) + deviceBean.dpName.entries.forEach { + when (it.key) { + "1" -> firstNameView.text = it.value + "2" -> secondNameView.text = it.value + "3" -> thirdNameView.text = it.value + } + } + deviceBean.dps.entries.forEach { + when (it.key) { + "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean + "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean + "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean + } + } + turnOffCheckBox.isChecked = + firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked + + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "2" -> { + secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "3" -> { + thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + } + } + } + }) + } + + 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(kTag, "onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + + turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + + firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + } + + secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + } + + thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + } + + 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/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml new file mode 100644 index 0000000..2b4ce62 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt index 405184e..d853d48 100644 --- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt @@ -34,7 +34,7 @@ import java.util.* /** - * 灶具 + * 燃气灶 * */ class CookerActivity : KotlinBaseActivity() { 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 new file mode 100644 index 0000000..344ac9a --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -0,0 +1,233 @@ +package com.casic.br.view.device + +import android.graphics.Color +import android.util.Log +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.createCommand +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.utils.CommandManager +import com.casic.br.utils.TuyaDeviceListener +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.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 +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_cooker.* +import kotlinx.android.synthetic.main.activity_power_strip.* +import kotlinx.android.synthetic.main.activity_power_strip.rootView +import kotlinx.android.synthetic.main.fragment_device_cooker_control.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 电源插排 + * TODO 数据上报暂缓 + * */ +class PowerStripActivity : KotlinBaseActivity() { + + private val context = this@PowerStripActivity + private val kTag = "PowerStripActivity" + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_power_strip + + 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)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + Log.d(kTag, deviceBean.dps.toJson()) + deviceBean.dpName.entries.forEach { + when (it.key) { + "1" -> firstNameView.text = it.value + "2" -> secondNameView.text = it.value + "3" -> thirdNameView.text = it.value + } + } + deviceBean.dps.entries.forEach { + when (it.key) { + "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean + "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean + "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean + } + } + turnOffCheckBox.isChecked = + firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked + + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "2" -> { + secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "3" -> { + thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + } + } + } + }) + } + + 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(kTag, "onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + + turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + + firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + } + + secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + } + + thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + } + + 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/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml new file mode 100644 index 0000000..2b4ce62 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml new file mode 100644 index 0000000..acc4cac --- /dev/null +++ b/app/src/main/res/drawable/ic_clock.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt index 405184e..d853d48 100644 --- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt @@ -34,7 +34,7 @@ import java.util.* /** - * 灶具 + * 燃气灶 * */ class CookerActivity : KotlinBaseActivity() { 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 new file mode 100644 index 0000000..344ac9a --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -0,0 +1,233 @@ +package com.casic.br.view.device + +import android.graphics.Color +import android.util.Log +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.createCommand +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.utils.CommandManager +import com.casic.br.utils.TuyaDeviceListener +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.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 +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_cooker.* +import kotlinx.android.synthetic.main.activity_power_strip.* +import kotlinx.android.synthetic.main.activity_power_strip.rootView +import kotlinx.android.synthetic.main.fragment_device_cooker_control.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 电源插排 + * TODO 数据上报暂缓 + * */ +class PowerStripActivity : KotlinBaseActivity() { + + private val context = this@PowerStripActivity + private val kTag = "PowerStripActivity" + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_power_strip + + 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)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + Log.d(kTag, deviceBean.dps.toJson()) + deviceBean.dpName.entries.forEach { + when (it.key) { + "1" -> firstNameView.text = it.value + "2" -> secondNameView.text = it.value + "3" -> thirdNameView.text = it.value + } + } + deviceBean.dps.entries.forEach { + when (it.key) { + "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean + "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean + "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean + } + } + turnOffCheckBox.isChecked = + firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked + + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "2" -> { + secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "3" -> { + thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + } + } + } + }) + } + + 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(kTag, "onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + + turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + + firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + } + + secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + } + + thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + } + + 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/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml new file mode 100644 index 0000000..2b4ce62 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml new file mode 100644 index 0000000..acc4cac --- /dev/null +++ b/app/src/main/res/drawable/ic_clock.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml index 642e4d4..6d88a1c 100644 --- a/app/src/main/res/drawable/ic_edit.xml +++ b/app/src/main/res/drawable/ic_edit.xml @@ -4,9 +4,9 @@ android:viewportWidth="1024" android:viewportHeight="1024"> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt index 405184e..d853d48 100644 --- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt @@ -34,7 +34,7 @@ import java.util.* /** - * 灶具 + * 燃气灶 * */ class CookerActivity : KotlinBaseActivity() { 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 new file mode 100644 index 0000000..344ac9a --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -0,0 +1,233 @@ +package com.casic.br.view.device + +import android.graphics.Color +import android.util.Log +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.createCommand +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.utils.CommandManager +import com.casic.br.utils.TuyaDeviceListener +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.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 +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_cooker.* +import kotlinx.android.synthetic.main.activity_power_strip.* +import kotlinx.android.synthetic.main.activity_power_strip.rootView +import kotlinx.android.synthetic.main.fragment_device_cooker_control.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 电源插排 + * TODO 数据上报暂缓 + * */ +class PowerStripActivity : KotlinBaseActivity() { + + private val context = this@PowerStripActivity + private val kTag = "PowerStripActivity" + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_power_strip + + 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)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + Log.d(kTag, deviceBean.dps.toJson()) + deviceBean.dpName.entries.forEach { + when (it.key) { + "1" -> firstNameView.text = it.value + "2" -> secondNameView.text = it.value + "3" -> thirdNameView.text = it.value + } + } + deviceBean.dps.entries.forEach { + when (it.key) { + "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean + "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean + "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean + } + } + turnOffCheckBox.isChecked = + firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked + + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "2" -> { + secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "3" -> { + thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + } + } + } + }) + } + + 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(kTag, "onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + + turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + + firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + } + + secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + } + + thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + } + + 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/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml new file mode 100644 index 0000000..2b4ce62 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml new file mode 100644 index 0000000..acc4cac --- /dev/null +++ b/app/src/main/res/drawable/ic_clock.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml index 642e4d4..6d88a1c 100644 --- a/app/src/main/res/drawable/ic_edit.xml +++ b/app/src/main/res/drawable/ic_edit.xml @@ -4,9 +4,9 @@ android:viewportWidth="1024" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_jack.xml b/app/src/main/res/drawable/ic_jack.xml new file mode 100644 index 0000000..fb6a6b0 --- /dev/null +++ b/app/src/main/res/drawable/ic_jack.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt index 405184e..d853d48 100644 --- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt @@ -34,7 +34,7 @@ import java.util.* /** - * 灶具 + * 燃气灶 * */ class CookerActivity : KotlinBaseActivity() { 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 new file mode 100644 index 0000000..344ac9a --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -0,0 +1,233 @@ +package com.casic.br.view.device + +import android.graphics.Color +import android.util.Log +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.createCommand +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.utils.CommandManager +import com.casic.br.utils.TuyaDeviceListener +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.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 +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_cooker.* +import kotlinx.android.synthetic.main.activity_power_strip.* +import kotlinx.android.synthetic.main.activity_power_strip.rootView +import kotlinx.android.synthetic.main.fragment_device_cooker_control.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 电源插排 + * TODO 数据上报暂缓 + * */ +class PowerStripActivity : KotlinBaseActivity() { + + private val context = this@PowerStripActivity + private val kTag = "PowerStripActivity" + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_power_strip + + 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)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + Log.d(kTag, deviceBean.dps.toJson()) + deviceBean.dpName.entries.forEach { + when (it.key) { + "1" -> firstNameView.text = it.value + "2" -> secondNameView.text = it.value + "3" -> thirdNameView.text = it.value + } + } + deviceBean.dps.entries.forEach { + when (it.key) { + "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean + "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean + "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean + } + } + turnOffCheckBox.isChecked = + firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked + + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "2" -> { + secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "3" -> { + thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + } + } + } + }) + } + + 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(kTag, "onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + + turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + + firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + } + + secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + } + + thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + } + + 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/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml new file mode 100644 index 0000000..2b4ce62 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml new file mode 100644 index 0000000..acc4cac --- /dev/null +++ b/app/src/main/res/drawable/ic_clock.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml index 642e4d4..6d88a1c 100644 --- a/app/src/main/res/drawable/ic_edit.xml +++ b/app/src/main/res/drawable/ic_edit.xml @@ -4,9 +4,9 @@ android:viewportWidth="1024" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_jack.xml b/app/src/main/res/drawable/ic_jack.xml new file mode 100644 index 0000000..fb6a6b0 --- /dev/null +++ b/app/src/main/res/drawable/ic_jack.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml new file mode 100644 index 0000000..3b719e1 --- /dev/null +++ b/app/src/main/res/drawable/selector_turn_off_check_box.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt index 405184e..d853d48 100644 --- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt @@ -34,7 +34,7 @@ import java.util.* /** - * 灶具 + * 燃气灶 * */ class CookerActivity : KotlinBaseActivity() { 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 new file mode 100644 index 0000000..344ac9a --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -0,0 +1,233 @@ +package com.casic.br.view.device + +import android.graphics.Color +import android.util.Log +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.createCommand +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.utils.CommandManager +import com.casic.br.utils.TuyaDeviceListener +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.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 +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_cooker.* +import kotlinx.android.synthetic.main.activity_power_strip.* +import kotlinx.android.synthetic.main.activity_power_strip.rootView +import kotlinx.android.synthetic.main.fragment_device_cooker_control.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 电源插排 + * TODO 数据上报暂缓 + * */ +class PowerStripActivity : KotlinBaseActivity() { + + private val context = this@PowerStripActivity + private val kTag = "PowerStripActivity" + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_power_strip + + 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)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + Log.d(kTag, deviceBean.dps.toJson()) + deviceBean.dpName.entries.forEach { + when (it.key) { + "1" -> firstNameView.text = it.value + "2" -> secondNameView.text = it.value + "3" -> thirdNameView.text = it.value + } + } + deviceBean.dps.entries.forEach { + when (it.key) { + "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean + "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean + "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean + } + } + turnOffCheckBox.isChecked = + firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked + + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "2" -> { + secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "3" -> { + thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + } + } + } + }) + } + + 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(kTag, "onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + + turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + + firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + } + + secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + } + + thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + } + + 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/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml new file mode 100644 index 0000000..2b4ce62 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml new file mode 100644 index 0000000..acc4cac --- /dev/null +++ b/app/src/main/res/drawable/ic_clock.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml index 642e4d4..6d88a1c 100644 --- a/app/src/main/res/drawable/ic_edit.xml +++ b/app/src/main/res/drawable/ic_edit.xml @@ -4,9 +4,9 @@ android:viewportWidth="1024" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_jack.xml b/app/src/main/res/drawable/ic_jack.xml new file mode 100644 index 0000000..fb6a6b0 --- /dev/null +++ b/app/src/main/res/drawable/ic_jack.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml new file mode 100644 index 0000000..3b719e1 --- /dev/null +++ b/app/src/main/res/drawable/selector_turn_off_check_box.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml new file mode 100644 index 0000000..3470022 --- /dev/null +++ b/app/src/main/res/layout/activity_power_strip.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 20f8bb3..70ef895 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,6 +71,7 @@ + { + selectedCategory.contains("rs") -> { + //热水器 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("yyj") -> { + selectedCategory.contains("yyj") -> { + //油烟机 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("bgl") -> { + selectedCategory.contains("bgl") -> { + //壁挂炉 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("rqz") -> { + selectedCategory.contains("rqz") -> { + //燃气灶 requireContext().navigatePageTo(deviceModel.devId) } - deviceModel.selectCategory().contains("wg2") -> { - + selectedCategory.contains("pc") -> { + //排插 + requireContext().navigatePageTo(deviceModel.devId) + } + selectedCategory.contains("wg2") -> { + //网关 } } } else { diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt index 405184e..d853d48 100644 --- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt @@ -34,7 +34,7 @@ import java.util.* /** - * 灶具 + * 燃气灶 * */ class CookerActivity : KotlinBaseActivity() { 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 new file mode 100644 index 0000000..344ac9a --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt @@ -0,0 +1,233 @@ +package com.casic.br.view.device + +import android.graphics.Color +import android.util.Log +import com.alibaba.fastjson.JSONObject +import com.casic.br.R +import com.casic.br.extensions.createCommand +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.utils.CommandManager +import com.casic.br.utils.TuyaDeviceListener +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.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 +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_cooker.* +import kotlinx.android.synthetic.main.activity_power_strip.* +import kotlinx.android.synthetic.main.activity_power_strip.rootView +import kotlinx.android.synthetic.main.fragment_device_cooker_control.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 电源插排 + * TODO 数据上报暂缓 + * */ +class PowerStripActivity : KotlinBaseActivity() { + + private val context = this@PowerStripActivity + private val kTag = "PowerStripActivity" + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_power_strip + + 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)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + Log.d(kTag, deviceBean.dps.toJson()) + deviceBean.dpName.entries.forEach { + when (it.key) { + "1" -> firstNameView.text = it.value + "2" -> secondNameView.text = it.value + "3" -> thirdNameView.text = it.value + } + } + deviceBean.dps.entries.forEach { + when (it.key) { + "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean + "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean + "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean + } + } + turnOffCheckBox.isChecked = + firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked + + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + val parseObject = JSONObject.parseObject(dpStr) + parseObject.keys.forEach { + when (it) { + "1" -> { + firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean + firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "2" -> { + secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean + secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + "3" -> { + thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean + thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) { + 1f + } else { + .5f + } + } + } + } + } + }) + } + + 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(kTag, "onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + + turnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + + firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked)) + } + + secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked)) + } + + thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked -> + CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked)) + } + } + + 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/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml new file mode 100644 index 0000000..2b4ce62 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml new file mode 100644 index 0000000..acc4cac --- /dev/null +++ b/app/src/main/res/drawable/ic_clock.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml index 642e4d4..6d88a1c 100644 --- a/app/src/main/res/drawable/ic_edit.xml +++ b/app/src/main/res/drawable/ic_edit.xml @@ -4,9 +4,9 @@ android:viewportWidth="1024" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_jack.xml b/app/src/main/res/drawable/ic_jack.xml new file mode 100644 index 0000000..fb6a6b0 --- /dev/null +++ b/app/src/main/res/drawable/ic_jack.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml new file mode 100644 index 0000000..3b719e1 --- /dev/null +++ b/app/src/main/res/drawable/selector_turn_off_check_box.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml new file mode 100644 index 0000000..3470022 --- /dev/null +++ b/app/src/main/res/layout/activity_power_strip.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_added_device_rv_g.xml b/app/src/main/res/layout/item_added_device_rv_g.xml index 15131cf..8f20750 100644 --- a/app/src/main/res/layout/item_added_device_rv_g.xml +++ b/app/src/main/res/layout/item_added_device_rv_g.xml @@ -62,6 +62,7 @@ android:layout_height="wrap_content" android:fontFamily="sans-serif-medium" android:paddingVertical="@dimen/dp_3" + android:singleLine="true" android:text="@string/app_name" android:textColor="@color/mainTextColor" android:textSize="@dimen/sp_12" />