diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 405184e..d853d48 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -34,7 +34,7 @@
import java.util.*
/**
- * 灶具
+ * 燃气灶
* */
class CookerActivity : KotlinBaseActivity() {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 405184e..d853d48 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -34,7 +34,7 @@
import java.util.*
/**
- * 灶具
+ * 燃气灶
* */
class CookerActivity : KotlinBaseActivity() {
diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
new file mode 100644
index 0000000..344ac9a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
@@ -0,0 +1,233 @@
+package com.casic.br.view.device
+
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_cooker.*
+import kotlinx.android.synthetic.main.activity_power_strip.*
+import kotlinx.android.synthetic.main.activity_power_strip.rootView
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 电源插排
+ * TODO 数据上报暂缓
+ * */
+class PowerStripActivity : KotlinBaseActivity() {
+
+ private val context = this@PowerStripActivity
+ private val kTag = "PowerStripActivity"
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_power_strip
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ Log.d(kTag, deviceBean.dps.toJson())
+ deviceBean.dpName.entries.forEach {
+ when (it.key) {
+ "1" -> firstNameView.text = it.value
+ "2" -> secondNameView.text = it.value
+ "3" -> thirdNameView.text = it.value
+ }
+ }
+ deviceBean.dps.entries.forEach {
+ when (it.key) {
+ "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean
+ "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean
+ "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean
+ }
+ }
+ turnOffCheckBox.isChecked =
+ firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked
+
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d(kTag, "onDpUpdate: $dpStr")
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "1" -> {
+ firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "2" -> {
+ secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "3" -> {
+ thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d(kTag, "onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ turnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+
+ firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ }
+
+ secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ }
+
+ thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 405184e..d853d48 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -34,7 +34,7 @@
import java.util.*
/**
- * 灶具
+ * 燃气灶
* */
class CookerActivity : KotlinBaseActivity() {
diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
new file mode 100644
index 0000000..344ac9a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
@@ -0,0 +1,233 @@
+package com.casic.br.view.device
+
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_cooker.*
+import kotlinx.android.synthetic.main.activity_power_strip.*
+import kotlinx.android.synthetic.main.activity_power_strip.rootView
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 电源插排
+ * TODO 数据上报暂缓
+ * */
+class PowerStripActivity : KotlinBaseActivity() {
+
+ private val context = this@PowerStripActivity
+ private val kTag = "PowerStripActivity"
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_power_strip
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ Log.d(kTag, deviceBean.dps.toJson())
+ deviceBean.dpName.entries.forEach {
+ when (it.key) {
+ "1" -> firstNameView.text = it.value
+ "2" -> secondNameView.text = it.value
+ "3" -> thirdNameView.text = it.value
+ }
+ }
+ deviceBean.dps.entries.forEach {
+ when (it.key) {
+ "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean
+ "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean
+ "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean
+ }
+ }
+ turnOffCheckBox.isChecked =
+ firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked
+
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d(kTag, "onDpUpdate: $dpStr")
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "1" -> {
+ firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "2" -> {
+ secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "3" -> {
+ thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d(kTag, "onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ turnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+
+ firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ }
+
+ secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ }
+
+ thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
new file mode 100644
index 0000000..2b4ce62
--- /dev/null
+++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 405184e..d853d48 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -34,7 +34,7 @@
import java.util.*
/**
- * 灶具
+ * 燃气灶
* */
class CookerActivity : KotlinBaseActivity() {
diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
new file mode 100644
index 0000000..344ac9a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
@@ -0,0 +1,233 @@
+package com.casic.br.view.device
+
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_cooker.*
+import kotlinx.android.synthetic.main.activity_power_strip.*
+import kotlinx.android.synthetic.main.activity_power_strip.rootView
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 电源插排
+ * TODO 数据上报暂缓
+ * */
+class PowerStripActivity : KotlinBaseActivity() {
+
+ private val context = this@PowerStripActivity
+ private val kTag = "PowerStripActivity"
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_power_strip
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ Log.d(kTag, deviceBean.dps.toJson())
+ deviceBean.dpName.entries.forEach {
+ when (it.key) {
+ "1" -> firstNameView.text = it.value
+ "2" -> secondNameView.text = it.value
+ "3" -> thirdNameView.text = it.value
+ }
+ }
+ deviceBean.dps.entries.forEach {
+ when (it.key) {
+ "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean
+ "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean
+ "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean
+ }
+ }
+ turnOffCheckBox.isChecked =
+ firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked
+
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d(kTag, "onDpUpdate: $dpStr")
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "1" -> {
+ firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "2" -> {
+ secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "3" -> {
+ thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d(kTag, "onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ turnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+
+ firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ }
+
+ secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ }
+
+ thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
new file mode 100644
index 0000000..2b4ce62
--- /dev/null
+++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml
new file mode 100644
index 0000000..acc4cac
--- /dev/null
+++ b/app/src/main/res/drawable/ic_clock.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 405184e..d853d48 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -34,7 +34,7 @@
import java.util.*
/**
- * 灶具
+ * 燃气灶
* */
class CookerActivity : KotlinBaseActivity() {
diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
new file mode 100644
index 0000000..344ac9a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
@@ -0,0 +1,233 @@
+package com.casic.br.view.device
+
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_cooker.*
+import kotlinx.android.synthetic.main.activity_power_strip.*
+import kotlinx.android.synthetic.main.activity_power_strip.rootView
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 电源插排
+ * TODO 数据上报暂缓
+ * */
+class PowerStripActivity : KotlinBaseActivity() {
+
+ private val context = this@PowerStripActivity
+ private val kTag = "PowerStripActivity"
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_power_strip
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ Log.d(kTag, deviceBean.dps.toJson())
+ deviceBean.dpName.entries.forEach {
+ when (it.key) {
+ "1" -> firstNameView.text = it.value
+ "2" -> secondNameView.text = it.value
+ "3" -> thirdNameView.text = it.value
+ }
+ }
+ deviceBean.dps.entries.forEach {
+ when (it.key) {
+ "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean
+ "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean
+ "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean
+ }
+ }
+ turnOffCheckBox.isChecked =
+ firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked
+
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d(kTag, "onDpUpdate: $dpStr")
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "1" -> {
+ firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "2" -> {
+ secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "3" -> {
+ thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d(kTag, "onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ turnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+
+ firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ }
+
+ secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ }
+
+ thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
new file mode 100644
index 0000000..2b4ce62
--- /dev/null
+++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml
new file mode 100644
index 0000000..acc4cac
--- /dev/null
+++ b/app/src/main/res/drawable/ic_clock.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml
index 642e4d4..6d88a1c 100644
--- a/app/src/main/res/drawable/ic_edit.xml
+++ b/app/src/main/res/drawable/ic_edit.xml
@@ -4,9 +4,9 @@
android:viewportWidth="1024"
android:viewportHeight="1024">
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 405184e..d853d48 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -34,7 +34,7 @@
import java.util.*
/**
- * 灶具
+ * 燃气灶
* */
class CookerActivity : KotlinBaseActivity() {
diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
new file mode 100644
index 0000000..344ac9a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
@@ -0,0 +1,233 @@
+package com.casic.br.view.device
+
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_cooker.*
+import kotlinx.android.synthetic.main.activity_power_strip.*
+import kotlinx.android.synthetic.main.activity_power_strip.rootView
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 电源插排
+ * TODO 数据上报暂缓
+ * */
+class PowerStripActivity : KotlinBaseActivity() {
+
+ private val context = this@PowerStripActivity
+ private val kTag = "PowerStripActivity"
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_power_strip
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ Log.d(kTag, deviceBean.dps.toJson())
+ deviceBean.dpName.entries.forEach {
+ when (it.key) {
+ "1" -> firstNameView.text = it.value
+ "2" -> secondNameView.text = it.value
+ "3" -> thirdNameView.text = it.value
+ }
+ }
+ deviceBean.dps.entries.forEach {
+ when (it.key) {
+ "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean
+ "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean
+ "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean
+ }
+ }
+ turnOffCheckBox.isChecked =
+ firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked
+
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d(kTag, "onDpUpdate: $dpStr")
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "1" -> {
+ firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "2" -> {
+ secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "3" -> {
+ thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d(kTag, "onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ turnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+
+ firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ }
+
+ secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ }
+
+ thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
new file mode 100644
index 0000000..2b4ce62
--- /dev/null
+++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml
new file mode 100644
index 0000000..acc4cac
--- /dev/null
+++ b/app/src/main/res/drawable/ic_clock.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml
index 642e4d4..6d88a1c 100644
--- a/app/src/main/res/drawable/ic_edit.xml
+++ b/app/src/main/res/drawable/ic_edit.xml
@@ -4,9 +4,9 @@
android:viewportWidth="1024"
android:viewportHeight="1024">
diff --git a/app/src/main/res/drawable/ic_jack.xml b/app/src/main/res/drawable/ic_jack.xml
new file mode 100644
index 0000000..fb6a6b0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_jack.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 405184e..d853d48 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -34,7 +34,7 @@
import java.util.*
/**
- * 灶具
+ * 燃气灶
* */
class CookerActivity : KotlinBaseActivity() {
diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
new file mode 100644
index 0000000..344ac9a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
@@ -0,0 +1,233 @@
+package com.casic.br.view.device
+
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_cooker.*
+import kotlinx.android.synthetic.main.activity_power_strip.*
+import kotlinx.android.synthetic.main.activity_power_strip.rootView
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 电源插排
+ * TODO 数据上报暂缓
+ * */
+class PowerStripActivity : KotlinBaseActivity() {
+
+ private val context = this@PowerStripActivity
+ private val kTag = "PowerStripActivity"
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_power_strip
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ Log.d(kTag, deviceBean.dps.toJson())
+ deviceBean.dpName.entries.forEach {
+ when (it.key) {
+ "1" -> firstNameView.text = it.value
+ "2" -> secondNameView.text = it.value
+ "3" -> thirdNameView.text = it.value
+ }
+ }
+ deviceBean.dps.entries.forEach {
+ when (it.key) {
+ "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean
+ "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean
+ "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean
+ }
+ }
+ turnOffCheckBox.isChecked =
+ firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked
+
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d(kTag, "onDpUpdate: $dpStr")
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "1" -> {
+ firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "2" -> {
+ secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "3" -> {
+ thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d(kTag, "onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ turnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+
+ firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ }
+
+ secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ }
+
+ thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
new file mode 100644
index 0000000..2b4ce62
--- /dev/null
+++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml
new file mode 100644
index 0000000..acc4cac
--- /dev/null
+++ b/app/src/main/res/drawable/ic_clock.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml
index 642e4d4..6d88a1c 100644
--- a/app/src/main/res/drawable/ic_edit.xml
+++ b/app/src/main/res/drawable/ic_edit.xml
@@ -4,9 +4,9 @@
android:viewportWidth="1024"
android:viewportHeight="1024">
diff --git a/app/src/main/res/drawable/ic_jack.xml b/app/src/main/res/drawable/ic_jack.xml
new file mode 100644
index 0000000..fb6a6b0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_jack.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_turn_off_check_box.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 405184e..d853d48 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -34,7 +34,7 @@
import java.util.*
/**
- * 灶具
+ * 燃气灶
* */
class CookerActivity : KotlinBaseActivity() {
diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
new file mode 100644
index 0000000..344ac9a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
@@ -0,0 +1,233 @@
+package com.casic.br.view.device
+
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_cooker.*
+import kotlinx.android.synthetic.main.activity_power_strip.*
+import kotlinx.android.synthetic.main.activity_power_strip.rootView
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 电源插排
+ * TODO 数据上报暂缓
+ * */
+class PowerStripActivity : KotlinBaseActivity() {
+
+ private val context = this@PowerStripActivity
+ private val kTag = "PowerStripActivity"
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_power_strip
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ Log.d(kTag, deviceBean.dps.toJson())
+ deviceBean.dpName.entries.forEach {
+ when (it.key) {
+ "1" -> firstNameView.text = it.value
+ "2" -> secondNameView.text = it.value
+ "3" -> thirdNameView.text = it.value
+ }
+ }
+ deviceBean.dps.entries.forEach {
+ when (it.key) {
+ "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean
+ "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean
+ "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean
+ }
+ }
+ turnOffCheckBox.isChecked =
+ firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked
+
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d(kTag, "onDpUpdate: $dpStr")
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "1" -> {
+ firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "2" -> {
+ secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "3" -> {
+ thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d(kTag, "onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ turnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+
+ firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ }
+
+ secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ }
+
+ thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
new file mode 100644
index 0000000..2b4ce62
--- /dev/null
+++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml
new file mode 100644
index 0000000..acc4cac
--- /dev/null
+++ b/app/src/main/res/drawable/ic_clock.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml
index 642e4d4..6d88a1c 100644
--- a/app/src/main/res/drawable/ic_edit.xml
+++ b/app/src/main/res/drawable/ic_edit.xml
@@ -4,9 +4,9 @@
android:viewportWidth="1024"
android:viewportHeight="1024">
diff --git a/app/src/main/res/drawable/ic_jack.xml b/app/src/main/res/drawable/ic_jack.xml
new file mode 100644
index 0000000..fb6a6b0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_jack.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_turn_off_check_box.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml
new file mode 100644
index 0000000..3470022
--- /dev/null
+++ b/app/src/main/res/layout/activity_power_strip.xml
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 20f8bb3..70ef895 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
+
{
+ selectedCategory.contains("rs") -> {
+ //热水器
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("yyj") -> {
+ selectedCategory.contains("yyj") -> {
+ //油烟机
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("bgl") -> {
+ selectedCategory.contains("bgl") -> {
+ //壁挂炉
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("rqz") -> {
+ selectedCategory.contains("rqz") -> {
+ //燃气灶
requireContext().navigatePageTo(deviceModel.devId)
}
- deviceModel.selectCategory().contains("wg2") -> {
-
+ selectedCategory.contains("pc") -> {
+ //排插
+ requireContext().navigatePageTo(deviceModel.devId)
+ }
+ selectedCategory.contains("wg2") -> {
+ //网关
}
}
} else {
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 405184e..d853d48 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -34,7 +34,7 @@
import java.util.*
/**
- * 灶具
+ * 燃气灶
* */
class CookerActivity : KotlinBaseActivity() {
diff --git a/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
new file mode 100644
index 0000000..344ac9a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/device/PowerStripActivity.kt
@@ -0,0 +1,233 @@
+package com.casic.br.view.device
+
+import android.graphics.Color
+import android.util.Log
+import com.alibaba.fastjson.JSONObject
+import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.TuyaDeviceListener
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.tuya.smart.android.device.bean.UpgradeInfoBean
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.sdk.api.IGetOtaInfoCallback
+import com.tuya.smart.sdk.api.IResultCallback
+import com.tuya.smart.sdk.api.ITuyaDevice
+import com.tuya.smart.sdk.api.ITuyaOta
+import kotlinx.android.synthetic.main.activity_cooker.*
+import kotlinx.android.synthetic.main.activity_power_strip.*
+import kotlinx.android.synthetic.main.activity_power_strip.rootView
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlinx.android.synthetic.main.include_device_title.*
+
+/**
+ * 电源插排
+ * TODO 数据上报暂缓
+ * */
+class PowerStripActivity : KotlinBaseActivity() {
+
+ private val context = this@PowerStripActivity
+ private val kTag = "PowerStripActivity"
+ private lateinit var tuyaOTA: ITuyaOta
+ private lateinit var deviceInstance: ITuyaDevice
+
+ override fun initLayoutView(): Int = R.layout.activity_power_strip
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ initLayoutImmersionBar(rootView)
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ val deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ tuyaOTA = TuyaHomeSdk.newOTAInstance(deviceId)
+ //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
+ deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
+
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ Log.d(kTag, deviceBean.dps.toJson())
+ deviceBean.dpName.entries.forEach {
+ when (it.key) {
+ "1" -> firstNameView.text = it.value
+ "2" -> secondNameView.text = it.value
+ "3" -> thirdNameView.text = it.value
+ }
+ }
+ deviceBean.dps.entries.forEach {
+ when (it.key) {
+ "1" -> firstTurnOffCheckBox.isChecked = it.value as Boolean
+ "2" -> secondTurnOffCheckBox.isChecked = it.value as Boolean
+ "3" -> thirdTurnOffCheckBox.isChecked = it.value as Boolean
+ }
+ }
+ turnOffCheckBox.isChecked =
+ firstTurnOffCheckBox.isChecked || secondTurnOffCheckBox.isChecked || thirdTurnOffCheckBox.isChecked
+
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+
+ deviceInstance.registerDevListener(object : TuyaDeviceListener() {
+ override fun onDpUpdate(devId: String?, dpStr: String?) {
+ Log.d(kTag, "onDpUpdate: $dpStr")
+ val parseObject = JSONObject.parseObject(dpStr)
+ parseObject.keys.forEach {
+ when (it) {
+ "1" -> {
+ firstTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ firstTurnOffImageView.alpha = if (firstTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "2" -> {
+ secondTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ secondTurnOffImageView.alpha = if (secondTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ "3" -> {
+ thirdTurnOffCheckBox.isChecked = parseObject[it] as Boolean
+ thirdTurnOffImageView.alpha = if (thirdTurnOffCheckBox.isChecked) {
+ 1f
+ } else {
+ .5f
+ }
+ }
+ }
+ }
+ }
+ })
+ }
+
+ override fun initEvent() {
+ rightOperateView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("固件升级", "移除设备"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> {
+ tuyaOTA.getOtaInfo(object : IGetOtaInfoCallback {
+ override fun onSuccess(upgradeInfoBeans: MutableList?) {
+ if (upgradeInfoBeans.isNullOrEmpty()) {
+ "无新版本可用".show(context)
+ }
+ val mainModel = upgradeInfoBeans!![0]
+ when (mainModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "主联网模组无新版本可用".show(context)
+ }
+
+ val mcuModel = upgradeInfoBeans[1]
+ when (mcuModel.upgradeStatus) {
+ 1 -> updateVersion()
+ 2 -> {
+
+ }
+ else -> "MCU模块无新版本可用".show(context)
+ }
+ }
+
+ override fun onFailure(code: String?, error: String?) {
+
+ }
+ })
+ }
+ 1 -> deviceInstance.removeDevice(object : IResultCallback {
+ override fun onError(code: String?, error: String?) {
+ Log.d(kTag, "onError: $error")
+ }
+
+ override fun onSuccess() {
+ finish()
+ }
+ })
+ }
+ }
+ })
+ .build().show()
+ }
+
+ turnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+
+ firstTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "1".createCommand(isChecked))
+ }
+
+ secondTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "2".createCommand(isChecked))
+ }
+
+ thirdTurnOffCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ CommandManager.sendTuyaDp(deviceInstance, "3".createCommand(isChecked))
+ }
+ }
+
+ private fun updateVersion() {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("版本升级")
+ .setMessage("有新版本可以升级,是否升级?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ tuyaOTA.startOta()
+ }
+
+ override fun onConfirmClick() {
+
+ }
+ })
+ .build().show()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ deviceInstance.unRegisterDevListener()
+ deviceInstance.onDestroy()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
new file mode 100644
index 0000000..2b4ce62
--- /dev/null
+++ b/app/src/main/res/drawable/bg_stroke_layout_main_radius_15.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml
new file mode 100644
index 0000000..acc4cac
--- /dev/null
+++ b/app/src/main/res/drawable/ic_clock.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml
index 642e4d4..6d88a1c 100644
--- a/app/src/main/res/drawable/ic_edit.xml
+++ b/app/src/main/res/drawable/ic_edit.xml
@@ -4,9 +4,9 @@
android:viewportWidth="1024"
android:viewportHeight="1024">
diff --git a/app/src/main/res/drawable/ic_jack.xml b/app/src/main/res/drawable/ic_jack.xml
new file mode 100644
index 0000000..fb6a6b0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_jack.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/selector_turn_off_check_box.xml b/app/src/main/res/drawable/selector_turn_off_check_box.xml
new file mode 100644
index 0000000..3b719e1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_turn_off_check_box.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_power_strip.xml b/app/src/main/res/layout/activity_power_strip.xml
new file mode 100644
index 0000000..3470022
--- /dev/null
+++ b/app/src/main/res/layout/activity_power_strip.xml
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_added_device_rv_g.xml b/app/src/main/res/layout/item_added_device_rv_g.xml
index 15131cf..8f20750 100644
--- a/app/src/main/res/layout/item_added_device_rv_g.xml
+++ b/app/src/main/res/layout/item_added_device_rv_g.xml
@@ -62,6 +62,7 @@
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:paddingVertical="@dimen/dp_3"
+ android:singleLine="true"
android:text="@string/app_name"
android:textColor="@color/mainTextColor"
android:textSize="@dimen/sp_12" />