diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 70ef895..1d57b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ + + "智能热水器" "rqz" -> "智能燃气灶" "bgl" -> "智能壁挂炉" + "pc" -> "Wi-Fi智能插排" + "cz" -> "Wi-Fi智能插座" "wg2" -> "多功能网关" else -> "其他" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 70ef895..1d57b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ + "智能热水器" "rqz" -> "智能燃气灶" "bgl" -> "智能壁挂炉" + "pc" -> "Wi-Fi智能插排" + "cz" -> "Wi-Fi智能插座" "wg2" -> "多功能网关" 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 7c899a0..d1f82d6 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -152,6 +152,10 @@ //排插 requireContext().navigatePageTo(deviceModel.devId) } + selectedCategory.contains("cz") -> { + //插座 + requireContext().navigatePageTo(deviceModel.devId) + } selectedCategory.contains("wg2") -> { //网关 } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 70ef895..1d57b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ + "智能热水器" "rqz" -> "智能燃气灶" "bgl" -> "智能壁挂炉" + "pc" -> "Wi-Fi智能插排" + "cz" -> "Wi-Fi智能插座" "wg2" -> "多功能网关" 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 7c899a0..d1f82d6 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -152,6 +152,10 @@ //排插 requireContext().navigatePageTo(deviceModel.devId) } + selectedCategory.contains("cz") -> { + //插座 + requireContext().navigatePageTo(deviceModel.devId) + } selectedCategory.contains("wg2") -> { //网关 } 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 new file mode 100644 index 0000000..122ef71 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -0,0 +1,166 @@ +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_single_strip.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 插座 + * TODO 数据上报暂缓 + * */ +class SingleStripActivity : KotlinBaseActivity() { + + private val kTag = "SingleStripActivity" + private val context = this@SingleStripActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_single_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()) + changeViewStatus(deviceBean.dps["1"] as Boolean) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + changeViewStatus(JSONObject.parseObject(dpStr)["1"] as Boolean) + } + }) + } + + private fun changeViewStatus(stripStatus: Boolean) { + turnOffCheckBox.isChecked = stripStatus + stripStatusView.text = if (stripStatus) { + "插座已开启" + } else { + "插座已关闭" + } + } + + 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)) + } + } + + 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 70ef895..1d57b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ + "智能热水器" "rqz" -> "智能燃气灶" "bgl" -> "智能壁挂炉" + "pc" -> "Wi-Fi智能插排" + "cz" -> "Wi-Fi智能插座" "wg2" -> "多功能网关" 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 7c899a0..d1f82d6 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -152,6 +152,10 @@ //排插 requireContext().navigatePageTo(deviceModel.devId) } + selectedCategory.contains("cz") -> { + //插座 + requireContext().navigatePageTo(deviceModel.devId) + } selectedCategory.contains("wg2") -> { //网关 } 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 new file mode 100644 index 0000000..122ef71 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -0,0 +1,166 @@ +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_single_strip.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 插座 + * TODO 数据上报暂缓 + * */ +class SingleStripActivity : KotlinBaseActivity() { + + private val kTag = "SingleStripActivity" + private val context = this@SingleStripActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_single_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()) + changeViewStatus(deviceBean.dps["1"] as Boolean) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + changeViewStatus(JSONObject.parseObject(dpStr)["1"] as Boolean) + } + }) + } + + private fun changeViewStatus(stripStatus: Boolean) { + turnOffCheckBox.isChecked = stripStatus + stripStatusView.text = if (stripStatus) { + "插座已开启" + } else { + "插座已关闭" + } + } + + 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)) + } + } + + 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_gray_circle.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml new file mode 100644 index 0000000..bf62be5 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 70ef895..1d57b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ + "智能热水器" "rqz" -> "智能燃气灶" "bgl" -> "智能壁挂炉" + "pc" -> "Wi-Fi智能插排" + "cz" -> "Wi-Fi智能插座" "wg2" -> "多功能网关" 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 7c899a0..d1f82d6 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -152,6 +152,10 @@ //排插 requireContext().navigatePageTo(deviceModel.devId) } + selectedCategory.contains("cz") -> { + //插座 + requireContext().navigatePageTo(deviceModel.devId) + } selectedCategory.contains("wg2") -> { //网关 } 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 new file mode 100644 index 0000000..122ef71 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -0,0 +1,166 @@ +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_single_strip.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 插座 + * TODO 数据上报暂缓 + * */ +class SingleStripActivity : KotlinBaseActivity() { + + private val kTag = "SingleStripActivity" + private val context = this@SingleStripActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_single_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()) + changeViewStatus(deviceBean.dps["1"] as Boolean) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + changeViewStatus(JSONObject.parseObject(dpStr)["1"] as Boolean) + } + }) + } + + private fun changeViewStatus(stripStatus: Boolean) { + turnOffCheckBox.isChecked = stripStatus + stripStatusView.text = if (stripStatus) { + "插座已开启" + } else { + "插座已关闭" + } + } + + 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)) + } + } + + 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_gray_circle.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml new file mode 100644 index 0000000..bf62be5 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_strip_off.xml b/app/src/main/res/drawable/ic_strip_off.xml new file mode 100644 index 0000000..d23a65c --- /dev/null +++ b/app/src/main/res/drawable/ic_strip_off.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 70ef895..1d57b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ + "智能热水器" "rqz" -> "智能燃气灶" "bgl" -> "智能壁挂炉" + "pc" -> "Wi-Fi智能插排" + "cz" -> "Wi-Fi智能插座" "wg2" -> "多功能网关" 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 7c899a0..d1f82d6 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -152,6 +152,10 @@ //排插 requireContext().navigatePageTo(deviceModel.devId) } + selectedCategory.contains("cz") -> { + //插座 + requireContext().navigatePageTo(deviceModel.devId) + } selectedCategory.contains("wg2") -> { //网关 } 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 new file mode 100644 index 0000000..122ef71 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -0,0 +1,166 @@ +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_single_strip.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 插座 + * TODO 数据上报暂缓 + * */ +class SingleStripActivity : KotlinBaseActivity() { + + private val kTag = "SingleStripActivity" + private val context = this@SingleStripActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_single_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()) + changeViewStatus(deviceBean.dps["1"] as Boolean) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + changeViewStatus(JSONObject.parseObject(dpStr)["1"] as Boolean) + } + }) + } + + private fun changeViewStatus(stripStatus: Boolean) { + turnOffCheckBox.isChecked = stripStatus + stripStatusView.text = if (stripStatus) { + "插座已开启" + } else { + "插座已关闭" + } + } + + 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)) + } + } + + 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_gray_circle.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml new file mode 100644 index 0000000..bf62be5 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_strip_off.xml b/app/src/main/res/drawable/ic_strip_off.xml new file mode 100644 index 0000000..d23a65c --- /dev/null +++ b/app/src/main/res/drawable/ic_strip_off.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_strip_on.xml b/app/src/main/res/drawable/ic_strip_on.xml new file mode 100644 index 0000000..ffd9cce --- /dev/null +++ b/app/src/main/res/drawable/ic_strip_on.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 70ef895..1d57b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ + "智能热水器" "rqz" -> "智能燃气灶" "bgl" -> "智能壁挂炉" + "pc" -> "Wi-Fi智能插排" + "cz" -> "Wi-Fi智能插座" "wg2" -> "多功能网关" 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 7c899a0..d1f82d6 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -152,6 +152,10 @@ //排插 requireContext().navigatePageTo(deviceModel.devId) } + selectedCategory.contains("cz") -> { + //插座 + requireContext().navigatePageTo(deviceModel.devId) + } selectedCategory.contains("wg2") -> { //网关 } 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 new file mode 100644 index 0000000..122ef71 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -0,0 +1,166 @@ +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_single_strip.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 插座 + * TODO 数据上报暂缓 + * */ +class SingleStripActivity : KotlinBaseActivity() { + + private val kTag = "SingleStripActivity" + private val context = this@SingleStripActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_single_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()) + changeViewStatus(deviceBean.dps["1"] as Boolean) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + changeViewStatus(JSONObject.parseObject(dpStr)["1"] as Boolean) + } + }) + } + + private fun changeViewStatus(stripStatus: Boolean) { + turnOffCheckBox.isChecked = stripStatus + stripStatusView.text = if (stripStatus) { + "插座已开启" + } else { + "插座已关闭" + } + } + + 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)) + } + } + + 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_gray_circle.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml new file mode 100644 index 0000000..bf62be5 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_strip_off.xml b/app/src/main/res/drawable/ic_strip_off.xml new file mode 100644 index 0000000..d23a65c --- /dev/null +++ b/app/src/main/res/drawable/ic_strip_off.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_strip_on.xml b/app/src/main/res/drawable/ic_strip_on.xml new file mode 100644 index 0000000..ffd9cce --- /dev/null +++ b/app/src/main/res/drawable/ic_strip_on.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml new file mode 100644 index 0000000..eb97bc9 --- /dev/null +++ b/app/src/main/res/drawable/selector_turn_off_single_strip.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 70ef895..1d57b75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ + "智能热水器" "rqz" -> "智能燃气灶" "bgl" -> "智能壁挂炉" + "pc" -> "Wi-Fi智能插排" + "cz" -> "Wi-Fi智能插座" "wg2" -> "多功能网关" 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 7c899a0..d1f82d6 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -152,6 +152,10 @@ //排插 requireContext().navigatePageTo(deviceModel.devId) } + selectedCategory.contains("cz") -> { + //插座 + requireContext().navigatePageTo(deviceModel.devId) + } selectedCategory.contains("wg2") -> { //网关 } 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 new file mode 100644 index 0000000..122ef71 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/SingleStripActivity.kt @@ -0,0 +1,166 @@ +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_single_strip.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 插座 + * TODO 数据上报暂缓 + * */ +class SingleStripActivity : KotlinBaseActivity() { + + private val kTag = "SingleStripActivity" + private val context = this@SingleStripActivity + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_single_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()) + changeViewStatus(deviceBean.dps["1"] as Boolean) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d(kTag, "onDpUpdate: $dpStr") + changeViewStatus(JSONObject.parseObject(dpStr)["1"] as Boolean) + } + }) + } + + private fun changeViewStatus(stripStatus: Boolean) { + turnOffCheckBox.isChecked = stripStatus + stripStatusView.text = if (stripStatus) { + "插座已开启" + } else { + "插座已关闭" + } + } + + 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)) + } + } + + 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_gray_circle.xml b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml new file mode 100644 index 0000000..bf62be5 --- /dev/null +++ b/app/src/main/res/drawable/bg_stroke_layout_gray_circle.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_strip_off.xml b/app/src/main/res/drawable/ic_strip_off.xml new file mode 100644 index 0000000..d23a65c --- /dev/null +++ b/app/src/main/res/drawable/ic_strip_off.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_strip_on.xml b/app/src/main/res/drawable/ic_strip_on.xml new file mode 100644 index 0000000..ffd9cce --- /dev/null +++ b/app/src/main/res/drawable/ic_strip_on.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable/selector_turn_off_single_strip.xml b/app/src/main/res/drawable/selector_turn_off_single_strip.xml new file mode 100644 index 0000000..eb97bc9 --- /dev/null +++ b/app/src/main/res/drawable/selector_turn_off_single_strip.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_single_strip.xml b/app/src/main/res/layout/activity_single_strip.xml new file mode 100644 index 0000000..8790073 --- /dev/null +++ b/app/src/main/res/layout/activity_single_strip.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + \ No newline at end of file