diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" else -> "其他" } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.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 bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.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 bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.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 bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.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 bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.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 bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.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 bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.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 bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png new file mode 100644 index 0000000..f460134 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png new file mode 100644 index 0000000..f460134 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk.png b/app/src/main/res/mipmap-xxhdpi/ic_milk.png new file mode 100644 index 0000000..b55a733 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png new file mode 100644 index 0000000..f460134 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk.png b/app/src/main/res/mipmap-xxhdpi/ic_milk.png new file mode 100644 index 0000000..b55a733 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png new file mode 100644 index 0000000..328c9a6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png new file mode 100644 index 0000000..f460134 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk.png b/app/src/main/res/mipmap-xxhdpi/ic_milk.png new file mode 100644 index 0000000..b55a733 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png new file mode 100644 index 0000000..328c9a6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal.png b/app/src/main/res/mipmap-xxhdpi/ic_normal.png new file mode 100644 index 0000000..b8bdcab --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png new file mode 100644 index 0000000..f460134 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk.png b/app/src/main/res/mipmap-xxhdpi/ic_milk.png new file mode 100644 index 0000000..b55a733 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png new file mode 100644 index 0000000..328c9a6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal.png b/app/src/main/res/mipmap-xxhdpi/ic_normal.png new file mode 100644 index 0000000..b8bdcab --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png new file mode 100644 index 0000000..b1bf333 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png new file mode 100644 index 0000000..f460134 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk.png b/app/src/main/res/mipmap-xxhdpi/ic_milk.png new file mode 100644 index 0000000..b55a733 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png new file mode 100644 index 0000000..328c9a6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal.png b/app/src/main/res/mipmap-xxhdpi/ic_normal.png new file mode 100644 index 0000000..b8bdcab --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png new file mode 100644 index 0000000..b1bf333 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_settings.png b/app/src/main/res/mipmap-xxhdpi/ic_settings.png new file mode 100644 index 0000000..6ea8fb2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_settings.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png new file mode 100644 index 0000000..f460134 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk.png b/app/src/main/res/mipmap-xxhdpi/ic_milk.png new file mode 100644 index 0000000..b55a733 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png new file mode 100644 index 0000000..328c9a6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal.png b/app/src/main/res/mipmap-xxhdpi/ic_normal.png new file mode 100644 index 0000000..b8bdcab --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png new file mode 100644 index 0000000..b1bf333 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_settings.png b/app/src/main/res/mipmap-xxhdpi/ic_settings.png new file mode 100644 index 0000000..6ea8fb2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_settings.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_settings_main.png b/app/src/main/res/mipmap-xxhdpi/ic_settings_main.png new file mode 100644 index 0000000..3b5ebfa --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_settings_main.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png new file mode 100644 index 0000000..f460134 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk.png b/app/src/main/res/mipmap-xxhdpi/ic_milk.png new file mode 100644 index 0000000..b55a733 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png new file mode 100644 index 0000000..328c9a6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal.png b/app/src/main/res/mipmap-xxhdpi/ic_normal.png new file mode 100644 index 0000000..b8bdcab --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png new file mode 100644 index 0000000..b1bf333 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_settings.png b/app/src/main/res/mipmap-xxhdpi/ic_settings.png new file mode 100644 index 0000000..6ea8fb2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_settings.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_settings_main.png b/app/src/main/res/mipmap-xxhdpi/ic_settings_main.png new file mode 100644 index 0000000..3b5ebfa --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_settings_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_switch.png b/app/src/main/res/mipmap-xxhdpi/ic_switch.png new file mode 100644 index 0000000..093bd0f --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_switch.png Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bd10711..2db3a08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,7 @@ + "燃气报警器" "cobj" -> "一氧化碳报警器" "yinsj" -> "即热式台式饮水机" + "kj" -> "空气净化器" 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 fa90b52..a226546 100644 --- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt @@ -178,6 +178,10 @@ //即热式台式饮水机 requireContext().navigatePageTo(deviceModel.devId) } + "kj" -> { + //空气净化器 + requireContext().navigatePageTo(deviceModel.devId) + } } } diff --git a/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt new file mode 100644 index 0000000..90c0880 --- /dev/null +++ b/app/src/main/java/com/casic/br/view/device/AirCleanerActivity.kt @@ -0,0 +1,165 @@ +package com.casic.br.view.device + +import android.content.Context +import android.graphics.Color +import android.util.Log +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R +import com.casic.br.extensions.initLayoutImmersionBar +import com.casic.br.extensions.toChineseTypeName +import com.casic.br.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.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_air_cleaner.* +import kotlinx.android.synthetic.main.include_device_title.* + +/** + * 空气净化器 + * TODO 数据上报暂缓 + * */ +class AirCleanerActivity : KotlinBaseActivity() { + + private val context: Context = this@AirCleanerActivity + private lateinit var deviceId: String + private lateinit var tuyaOTA: ITuyaOta + private lateinit var deviceInstance: ITuyaDevice + + override fun initLayoutView(): Int = R.layout.activity_air_cleaner + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + initLayoutImmersionBar(rootView) + ImmersionBar.with(this).statusBarDarkFont(true).init() + + leftBackView.setOnClickListener { finish() } + } + + override fun initData() { + deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! + tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId) + //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 + deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) + + val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId) + if (deviceBean == null) { + "查询设备信息失败,请检查设备是否已离线".show(this) + return + } + titleView.text = deviceBean.toChineseTypeName() + Glide.with(this) + .load(deviceBean.iconUrl) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(deviceLogoView) + + deviceInstance.registerDevListener(object : TuyaDeviceListener() { + override fun onDpUpdate(devId: String?, dpStr: String?) { + Log.d("Casic", "AirCleanerActivity => onDpUpdate: $dpStr") + //{"1":true,"11":false,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + //{"1":true,"19":"cancle","2":6,"20":0,"22":"1","3":"1","4":"1","5":99,"6":true,"7":false} + } + }) + } + + override fun initEvent() { + rightOperateView.setOnClickListener { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitle(arrayListOf("固件升级", "移除设备")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> { + tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback { + override fun onSuccess(upgradeInfoBeans: MutableList?) { + if (upgradeInfoBeans.isNullOrEmpty()) { + "无新版本可用".show(context) + } + val mainModel = upgradeInfoBeans!![0] + when (mainModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "主联网模组无新版本可用".show(context) + } + + val mcuModel = upgradeInfoBeans[1] + when (mcuModel.upgradeStatus) { + 1 -> updateVersion() + 2 -> { + + } + else -> "MCU模块无新版本可用".show(context) + } + } + + override fun onFailure(code: String?, error: String?) { + + } + }) + } + 1 -> deviceInstance.removeDevice(object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.d("Casic", "WaterDispenserActivity => onError: $error") + } + + override fun onSuccess() { + finish() + } + }) + } + } + }) + .build().show() + } + } + + override fun onResume() { + super.onResume() + //每次获取焦点都查询设备的开关机状态 + CommandManager.getTuyaDp(deviceInstance, "1") + } + + private fun updateVersion() { + AlertControlDialog.Builder() + .setContext(this) + .setTitle("版本升级") + .setMessage("有新版本可以升级,是否升级?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + tuyaOTA.startOta() + } + + override fun onConfirmClick() { + + } + }) + .build().show() + } + + override fun onDestroy() { + super.onDestroy() + deviceInstance.unRegisterDevListener() + deviceInstance.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_boiled.xml b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml new file mode 100644 index 0000000..1de3430 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_boiled.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_child.xml b/app/src/main/res/drawable/selector_water_dispenser_child.xml new file mode 100644 index 0000000..8993a0a --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_child.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_coffee.xml b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml new file mode 100644 index 0000000..b7a586d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_coffee.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_custom.xml b/app/src/main/res/drawable/selector_water_dispenser_custom.xml new file mode 100644 index 0000000..661be6d --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_custom.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_milk.xml b/app/src/main/res/drawable/selector_water_dispenser_milk.xml new file mode 100644 index 0000000..ef9dba7 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_milk.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_normal.xml b/app/src/main/res/drawable/selector_water_dispenser_normal.xml index fc936c6..060e002 100644 --- a/app/src/main/res/drawable/selector_water_dispenser_normal.xml +++ b/app/src/main/res/drawable/selector_water_dispenser_normal.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_settings.xml b/app/src/main/res/drawable/selector_water_dispenser_settings.xml new file mode 100644 index 0000000..e19c2a1 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_water_dispenser_switch.xml b/app/src/main/res/drawable/selector_water_dispenser_switch.xml new file mode 100644 index 0000000..a5577f0 --- /dev/null +++ b/app/src/main/res/drawable/selector_water_dispenser_switch.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_air_cleaner.xml b/app/src/main/res/layout/activity_air_cleaner.xml new file mode 100644 index 0000000..bb137e8 --- /dev/null +++ b/app/src/main/res/layout/activity_air_cleaner.xml @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_water_dispenser.xml b/app/src/main/res/layout/activity_water_dispenser.xml index b3a661a..78918e3 100644 --- a/app/src/main/res/layout/activity_water_dispenser.xml +++ b/app/src/main/res/layout/activity_water_dispenser.xml @@ -170,7 +170,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_milk" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲牛奶" /> @@ -181,7 +181,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_coffee" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="冲咖啡" /> @@ -192,7 +192,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_boiled" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="开水" /> @@ -203,7 +203,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_custom" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="自定义" /> @@ -225,7 +225,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_child" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="童锁" /> @@ -236,7 +236,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_switch" android:drawablePadding="@dimen/dp_5" android:enabled="false" android:gravity="center" @@ -249,7 +249,7 @@ android:layout_weight="1" android:button="@null" android:checked="true" - android:drawableTop="@drawable/selector_water_dispenser_normal" + android:drawableTop="@drawable/selector_water_dispenser_settings" android:drawablePadding="@dimen/dp_5" android:gravity="center" android:text="设置" /> diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png new file mode 100644 index 0000000..d242b8d --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png new file mode 100644 index 0000000..1410582 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_boiled_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child.png b/app/src/main/res/mipmap-xxhdpi/ic_child.png new file mode 100644 index 0000000..6a94298 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_child_main.png b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png new file mode 100644 index 0000000..8b9adc1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_child_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png new file mode 100644 index 0000000..33ea99b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png new file mode 100644 index 0000000..a3ed0f6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_coffee_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom.png b/app/src/main/res/mipmap-xxhdpi/ic_custom.png new file mode 100644 index 0000000..5b26f00 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png new file mode 100644 index 0000000..f460134 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_custom_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk.png b/app/src/main/res/mipmap-xxhdpi/ic_milk.png new file mode 100644 index 0000000..b55a733 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png new file mode 100644 index 0000000..328c9a6 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_milk_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal.png b/app/src/main/res/mipmap-xxhdpi/ic_normal.png new file mode 100644 index 0000000..b8bdcab --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png new file mode 100644 index 0000000..b1bf333 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_normal_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_settings.png b/app/src/main/res/mipmap-xxhdpi/ic_settings.png new file mode 100644 index 0000000..6ea8fb2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_settings.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_settings_main.png b/app/src/main/res/mipmap-xxhdpi/ic_settings_main.png new file mode 100644 index 0000000..3b5ebfa --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_settings_main.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_switch.png b/app/src/main/res/mipmap-xxhdpi/ic_switch.png new file mode 100644 index 0000000..093bd0f --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_switch.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_switch_main.png b/app/src/main/res/mipmap-xxhdpi/ic_switch_main.png new file mode 100644 index 0000000..2327f37 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/ic_switch_main.png Binary files differ