diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 1a2a9c8..aa65140 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -26,8 +26,6 @@ } private fun startSplashScreenActivity() { - //TODO 不要开屏页 -// navigatePageTo() navigatePageTo() finish() } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 1a2a9c8..aa65140 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -26,8 +26,6 @@ } private fun startSplashScreenActivity() { - //TODO 不要开屏页 -// navigatePageTo() navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt deleted file mode 100644 index 4fdf7dd..0000000 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.casic.br.view - -import android.annotation.SuppressLint -import android.os.CountDownTimer -import android.view.ViewGroup -import com.casic.br.R -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.qmuiteam.qmui.util.QMUIDisplayHelper -import kotlinx.android.synthetic.main.activity_splash.* - -@SuppressLint("CustomSplashScreen") -class SplashScreenActivity : KotlinBaseActivity() { - - private lateinit var countDownTimer: CountDownTimer - - override fun initLayoutView(): Int = R.layout.activity_splash - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - //根据不同设备状态栏高度设置"跳过"按钮的Margin值 - val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) - val rightMargin = QMUIDisplayHelper.dp2px(this, 10) - if (skipButton.layoutParams is ViewGroup.MarginLayoutParams) { - val params = skipButton.layoutParams as ViewGroup.MarginLayoutParams - params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0) - skipButton.requestLayout() - } - } - - override fun initData() { - countDownTimer = object : CountDownTimer(4000, 1000) { - override fun onFinish() { - startMainActivity() - } - - override fun onTick(millisUntilFinished: Long) { - skipButton.text = String.format("跳过\u3000${(millisUntilFinished / 1000)}s") - } - } - } - - override fun observeRequestState() { - - } - - override fun initEvent() { - countDownTimer.start() - skipButton.setChangeAlphaWhenPress(true) - skipButton.setOnClickListener { - countDownTimer.cancel() - startMainActivity() - } - } - - fun startMainActivity() { - navigatePageTo() - finish() - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 1a2a9c8..aa65140 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -26,8 +26,6 @@ } private fun startSplashScreenActivity() { - //TODO 不要开屏页 -// navigatePageTo() navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt deleted file mode 100644 index 4fdf7dd..0000000 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.casic.br.view - -import android.annotation.SuppressLint -import android.os.CountDownTimer -import android.view.ViewGroup -import com.casic.br.R -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.qmuiteam.qmui.util.QMUIDisplayHelper -import kotlinx.android.synthetic.main.activity_splash.* - -@SuppressLint("CustomSplashScreen") -class SplashScreenActivity : KotlinBaseActivity() { - - private lateinit var countDownTimer: CountDownTimer - - override fun initLayoutView(): Int = R.layout.activity_splash - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - //根据不同设备状态栏高度设置"跳过"按钮的Margin值 - val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) - val rightMargin = QMUIDisplayHelper.dp2px(this, 10) - if (skipButton.layoutParams is ViewGroup.MarginLayoutParams) { - val params = skipButton.layoutParams as ViewGroup.MarginLayoutParams - params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0) - skipButton.requestLayout() - } - } - - override fun initData() { - countDownTimer = object : CountDownTimer(4000, 1000) { - override fun onFinish() { - startMainActivity() - } - - override fun onTick(millisUntilFinished: Long) { - skipButton.text = String.format("跳过\u3000${(millisUntilFinished / 1000)}s") - } - } - } - - override fun observeRequestState() { - - } - - override fun initEvent() { - countDownTimer.start() - skipButton.setChangeAlphaWhenPress(true) - skipButton.setOnClickListener { - countDownTimer.cancel() - startMainActivity() - } - } - - fun startMainActivity() { - navigatePageTo() - finish() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 0aa82f6..e221d61 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -80,7 +80,6 @@ fragmentPages.add(ServicePageFragment()) deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d(kTag, "onDpUpdate: $dpStr") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 1a2a9c8..aa65140 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -26,8 +26,6 @@ } private fun startSplashScreenActivity() { - //TODO 不要开屏页 -// navigatePageTo() navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt deleted file mode 100644 index 4fdf7dd..0000000 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.casic.br.view - -import android.annotation.SuppressLint -import android.os.CountDownTimer -import android.view.ViewGroup -import com.casic.br.R -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.qmuiteam.qmui.util.QMUIDisplayHelper -import kotlinx.android.synthetic.main.activity_splash.* - -@SuppressLint("CustomSplashScreen") -class SplashScreenActivity : KotlinBaseActivity() { - - private lateinit var countDownTimer: CountDownTimer - - override fun initLayoutView(): Int = R.layout.activity_splash - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - //根据不同设备状态栏高度设置"跳过"按钮的Margin值 - val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) - val rightMargin = QMUIDisplayHelper.dp2px(this, 10) - if (skipButton.layoutParams is ViewGroup.MarginLayoutParams) { - val params = skipButton.layoutParams as ViewGroup.MarginLayoutParams - params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0) - skipButton.requestLayout() - } - } - - override fun initData() { - countDownTimer = object : CountDownTimer(4000, 1000) { - override fun onFinish() { - startMainActivity() - } - - override fun onTick(millisUntilFinished: Long) { - skipButton.text = String.format("跳过\u3000${(millisUntilFinished / 1000)}s") - } - } - } - - override fun observeRequestState() { - - } - - override fun initEvent() { - countDownTimer.start() - skipButton.setChangeAlphaWhenPress(true) - skipButton.setOnClickListener { - countDownTimer.cancel() - startMainActivity() - } - } - - fun startMainActivity() { - navigatePageTo() - finish() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 0aa82f6..e221d61 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -80,7 +80,6 @@ fragmentPages.add(ServicePageFragment()) deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d(kTag, "onDpUpdate: $dpStr") diff --git a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt index 36f3838..9afd90b 100644 --- a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt @@ -5,9 +5,8 @@ import androidx.activity.result.contract.ActivityResultContracts import com.alibaba.fastjson.JSONObject import com.casic.br.R -import com.casic.br.extensions.createCommand +import com.casic.br.model.TimeConfigModel 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.convertColor @@ -15,10 +14,10 @@ import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.tuya.smart.android.common.utils.Base64 -import com.tuya.smart.android.common.utils.HexUtil +import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk -import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.api.ITuyaDataCallback +import com.tuya.smart.sdk.bean.TimerTask import kotlinx.android.synthetic.main.activity_time_config.* import kotlinx.android.synthetic.main.include_base_title.* @@ -29,7 +28,6 @@ private val kTag = "TimeConfigActivity" private lateinit var deviceId: String - private lateinit var deviceInstance: ITuyaDevice private var selectedTime: String? = null private var selectedTemp: String? = null @@ -49,21 +47,33 @@ override fun initData() { deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! - //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 - deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) - CommandManager.getTuyaDp(deviceInstance, "16") - deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { - Log.d(kTag, "onDpUpdate: $dpStr") - val parseObject = JSONObject.parseObject(dpStr) - parseObject.keys.forEach { - //{"16":"070009002400120014002400"} - if (it == "16") { + TuyaHomeSdk.getTimerInstance() + .getTimerList("预约时间设定", deviceId, TimerDeviceTypeEnum.DEVICE, object : + ITuyaDataCallback { + override fun onSuccess(result: TimerTask?) { + if (result == null) { + Log.e(kTag, "预约时间未设定") + return + } + Log.d(kTag, result.toJson()) + if (result.timerList.isEmpty()) { + timeConfigSwitch.isChecked = false + } else { + timeConfigSwitch.isChecked = result.timerTaskStatus.isOpen + val last = result.timerList.last() + timeConfigView.text = last.time + val parseObject = JSONObject.parseObject(last.value) + tempConfigView.text = + String.format("水温:${parseObject["16"]}${resources.getString(R.string.temperature_unit)}") } } - } - }) + + override fun onError(errorCode: String?, errorMessage: String?) { + + } + + }) } private val timeConfigLauncher = @@ -83,51 +93,54 @@ timeConfigLauncher.launch(Intent(this, AddTimeConfigActivity::class.java)) } - timeConfigSwitch.setOnCheckedChangeListener { view, isChecked -> - val status = if (isChecked) { - 1 + timeConfigSwitch.setOnClickListener { + if (timeConfigSwitch.isChecked) { + /** + * 循环次数,格式为 0000000,每一位数字的取值可以是 + * 0:关闭 + * 1:开启 + * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 + * 如每个周一循环该任务,则取值为 0100000。 + * 0000000 表示只执行一次,1111111 表示每天执行。 + * + * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, + * 其中 Raw 类型的 DP 需要转换格式, + * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) + * */ + + if (timeConfigView.text.isNullOrBlank() || tempConfigView.text.isNullOrBlank()) { + "操作错误!请先设置定时参数".show(this) + timeConfigSwitch.isChecked = false + return@setOnClickListener + } + +// val dps = mutableMapOf() +// dps["16"] = selectedTemp!! +// val time = mutableMapOf() +// time["time"] = selectedTime!! +// val action = +// "{\"dps\":" + JSONObject.toJSONString(dps) + "," + JSONObject.toJSONString(time) +// .replace("{", "").replace("}", "") + "}" +// Log.d(kTag, "action: $action") + /** + * {"dps":{"16":"36°C"},"time":"10:35"} + * */ + val timeConfig = TimeConfigModel() + val dpsModel = TimeConfigModel.DpsModel() + dpsModel.`_$16` = selectedTemp!! + timeConfig.dps = dpsModel + timeConfig.time = selectedTime!! + + CommandManager.addDeviceTimer( + "预约时间设定", + deviceId, + timeConfig.toJson(), + "0000000", + "热水器" + ) } else { - 0 + CommandManager.deleteDeviceTimer("预约时间设定", deviceId) } - - /** - * 循环次数,格式为 0000000,每一位数字的取值可以是 - * 0:关闭 - * 1:开启 - * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 - * 如每个周一循环该任务,则取值为 0100000。 - * 0000000 表示只执行一次,1111111 表示每天执行。 - * - * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, - * 其中 Raw 类型的 DP 需要转换格式, - * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - * */ - - if (selectedTime.isNullOrBlank() || selectedTemp.isNullOrBlank()) { - "请先设置热水器参数".show(this) - view.isChecked = false - return@setOnCheckedChangeListener - } - val dps = "16".createCommand(selectedTemp!!) - Log.d(kTag, "dps: $dps") - val dpsRaw = String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - val map = HashMap() - map["dps"] = dpsRaw - map["time"] = selectedTime!! - val actions = map.toJson() - - //{"dps":{"16":"36°C"}, "time":"9:20"} - Log.d(kTag, "actions: $actions") - - CommandManager.addDeviceTimer( - "预约时间设定", - deviceId, - "{\"dps\":{\"16\":\"36°C\"}, \"time\":\"9:20\"}", - "0000000", - "热水器", - status, - true - ) } } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 1a2a9c8..aa65140 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -26,8 +26,6 @@ } private fun startSplashScreenActivity() { - //TODO 不要开屏页 -// navigatePageTo() navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt deleted file mode 100644 index 4fdf7dd..0000000 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.casic.br.view - -import android.annotation.SuppressLint -import android.os.CountDownTimer -import android.view.ViewGroup -import com.casic.br.R -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.qmuiteam.qmui.util.QMUIDisplayHelper -import kotlinx.android.synthetic.main.activity_splash.* - -@SuppressLint("CustomSplashScreen") -class SplashScreenActivity : KotlinBaseActivity() { - - private lateinit var countDownTimer: CountDownTimer - - override fun initLayoutView(): Int = R.layout.activity_splash - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - //根据不同设备状态栏高度设置"跳过"按钮的Margin值 - val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) - val rightMargin = QMUIDisplayHelper.dp2px(this, 10) - if (skipButton.layoutParams is ViewGroup.MarginLayoutParams) { - val params = skipButton.layoutParams as ViewGroup.MarginLayoutParams - params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0) - skipButton.requestLayout() - } - } - - override fun initData() { - countDownTimer = object : CountDownTimer(4000, 1000) { - override fun onFinish() { - startMainActivity() - } - - override fun onTick(millisUntilFinished: Long) { - skipButton.text = String.format("跳过\u3000${(millisUntilFinished / 1000)}s") - } - } - } - - override fun observeRequestState() { - - } - - override fun initEvent() { - countDownTimer.start() - skipButton.setChangeAlphaWhenPress(true) - skipButton.setOnClickListener { - countDownTimer.cancel() - startMainActivity() - } - } - - fun startMainActivity() { - navigatePageTo() - finish() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 0aa82f6..e221d61 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -80,7 +80,6 @@ fragmentPages.add(ServicePageFragment()) deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d(kTag, "onDpUpdate: $dpStr") diff --git a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt index 36f3838..9afd90b 100644 --- a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt @@ -5,9 +5,8 @@ import androidx.activity.result.contract.ActivityResultContracts import com.alibaba.fastjson.JSONObject import com.casic.br.R -import com.casic.br.extensions.createCommand +import com.casic.br.model.TimeConfigModel 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.convertColor @@ -15,10 +14,10 @@ import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.tuya.smart.android.common.utils.Base64 -import com.tuya.smart.android.common.utils.HexUtil +import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk -import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.api.ITuyaDataCallback +import com.tuya.smart.sdk.bean.TimerTask import kotlinx.android.synthetic.main.activity_time_config.* import kotlinx.android.synthetic.main.include_base_title.* @@ -29,7 +28,6 @@ private val kTag = "TimeConfigActivity" private lateinit var deviceId: String - private lateinit var deviceInstance: ITuyaDevice private var selectedTime: String? = null private var selectedTemp: String? = null @@ -49,21 +47,33 @@ override fun initData() { deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! - //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 - deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) - CommandManager.getTuyaDp(deviceInstance, "16") - deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { - Log.d(kTag, "onDpUpdate: $dpStr") - val parseObject = JSONObject.parseObject(dpStr) - parseObject.keys.forEach { - //{"16":"070009002400120014002400"} - if (it == "16") { + TuyaHomeSdk.getTimerInstance() + .getTimerList("预约时间设定", deviceId, TimerDeviceTypeEnum.DEVICE, object : + ITuyaDataCallback { + override fun onSuccess(result: TimerTask?) { + if (result == null) { + Log.e(kTag, "预约时间未设定") + return + } + Log.d(kTag, result.toJson()) + if (result.timerList.isEmpty()) { + timeConfigSwitch.isChecked = false + } else { + timeConfigSwitch.isChecked = result.timerTaskStatus.isOpen + val last = result.timerList.last() + timeConfigView.text = last.time + val parseObject = JSONObject.parseObject(last.value) + tempConfigView.text = + String.format("水温:${parseObject["16"]}${resources.getString(R.string.temperature_unit)}") } } - } - }) + + override fun onError(errorCode: String?, errorMessage: String?) { + + } + + }) } private val timeConfigLauncher = @@ -83,51 +93,54 @@ timeConfigLauncher.launch(Intent(this, AddTimeConfigActivity::class.java)) } - timeConfigSwitch.setOnCheckedChangeListener { view, isChecked -> - val status = if (isChecked) { - 1 + timeConfigSwitch.setOnClickListener { + if (timeConfigSwitch.isChecked) { + /** + * 循环次数,格式为 0000000,每一位数字的取值可以是 + * 0:关闭 + * 1:开启 + * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 + * 如每个周一循环该任务,则取值为 0100000。 + * 0000000 表示只执行一次,1111111 表示每天执行。 + * + * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, + * 其中 Raw 类型的 DP 需要转换格式, + * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) + * */ + + if (timeConfigView.text.isNullOrBlank() || tempConfigView.text.isNullOrBlank()) { + "操作错误!请先设置定时参数".show(this) + timeConfigSwitch.isChecked = false + return@setOnClickListener + } + +// val dps = mutableMapOf() +// dps["16"] = selectedTemp!! +// val time = mutableMapOf() +// time["time"] = selectedTime!! +// val action = +// "{\"dps\":" + JSONObject.toJSONString(dps) + "," + JSONObject.toJSONString(time) +// .replace("{", "").replace("}", "") + "}" +// Log.d(kTag, "action: $action") + /** + * {"dps":{"16":"36°C"},"time":"10:35"} + * */ + val timeConfig = TimeConfigModel() + val dpsModel = TimeConfigModel.DpsModel() + dpsModel.`_$16` = selectedTemp!! + timeConfig.dps = dpsModel + timeConfig.time = selectedTime!! + + CommandManager.addDeviceTimer( + "预约时间设定", + deviceId, + timeConfig.toJson(), + "0000000", + "热水器" + ) } else { - 0 + CommandManager.deleteDeviceTimer("预约时间设定", deviceId) } - - /** - * 循环次数,格式为 0000000,每一位数字的取值可以是 - * 0:关闭 - * 1:开启 - * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 - * 如每个周一循环该任务,则取值为 0100000。 - * 0000000 表示只执行一次,1111111 表示每天执行。 - * - * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, - * 其中 Raw 类型的 DP 需要转换格式, - * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - * */ - - if (selectedTime.isNullOrBlank() || selectedTemp.isNullOrBlank()) { - "请先设置热水器参数".show(this) - view.isChecked = false - return@setOnCheckedChangeListener - } - val dps = "16".createCommand(selectedTemp!!) - Log.d(kTag, "dps: $dps") - val dpsRaw = String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - val map = HashMap() - map["dps"] = dpsRaw - map["time"] = selectedTime!! - val actions = map.toJson() - - //{"dps":{"16":"36°C"}, "time":"9:20"} - Log.d(kTag, "actions: $actions") - - CommandManager.addDeviceTimer( - "预约时间设定", - deviceId, - "{\"dps\":{\"16\":\"36°C\"}, \"time\":\"9:20\"}", - "0000000", - "热水器", - status, - true - ) } } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml deleted file mode 100644 index a84f957..0000000 --- a/app/src/main/res/layout/activity_splash.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 1a2a9c8..aa65140 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -26,8 +26,6 @@ } private fun startSplashScreenActivity() { - //TODO 不要开屏页 -// navigatePageTo() navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt deleted file mode 100644 index 4fdf7dd..0000000 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.casic.br.view - -import android.annotation.SuppressLint -import android.os.CountDownTimer -import android.view.ViewGroup -import com.casic.br.R -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.qmuiteam.qmui.util.QMUIDisplayHelper -import kotlinx.android.synthetic.main.activity_splash.* - -@SuppressLint("CustomSplashScreen") -class SplashScreenActivity : KotlinBaseActivity() { - - private lateinit var countDownTimer: CountDownTimer - - override fun initLayoutView(): Int = R.layout.activity_splash - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - //根据不同设备状态栏高度设置"跳过"按钮的Margin值 - val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) - val rightMargin = QMUIDisplayHelper.dp2px(this, 10) - if (skipButton.layoutParams is ViewGroup.MarginLayoutParams) { - val params = skipButton.layoutParams as ViewGroup.MarginLayoutParams - params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0) - skipButton.requestLayout() - } - } - - override fun initData() { - countDownTimer = object : CountDownTimer(4000, 1000) { - override fun onFinish() { - startMainActivity() - } - - override fun onTick(millisUntilFinished: Long) { - skipButton.text = String.format("跳过\u3000${(millisUntilFinished / 1000)}s") - } - } - } - - override fun observeRequestState() { - - } - - override fun initEvent() { - countDownTimer.start() - skipButton.setChangeAlphaWhenPress(true) - skipButton.setOnClickListener { - countDownTimer.cancel() - startMainActivity() - } - } - - fun startMainActivity() { - navigatePageTo() - finish() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 0aa82f6..e221d61 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -80,7 +80,6 @@ fragmentPages.add(ServicePageFragment()) deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d(kTag, "onDpUpdate: $dpStr") diff --git a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt index 36f3838..9afd90b 100644 --- a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt @@ -5,9 +5,8 @@ import androidx.activity.result.contract.ActivityResultContracts import com.alibaba.fastjson.JSONObject import com.casic.br.R -import com.casic.br.extensions.createCommand +import com.casic.br.model.TimeConfigModel 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.convertColor @@ -15,10 +14,10 @@ import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.tuya.smart.android.common.utils.Base64 -import com.tuya.smart.android.common.utils.HexUtil +import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk -import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.api.ITuyaDataCallback +import com.tuya.smart.sdk.bean.TimerTask import kotlinx.android.synthetic.main.activity_time_config.* import kotlinx.android.synthetic.main.include_base_title.* @@ -29,7 +28,6 @@ private val kTag = "TimeConfigActivity" private lateinit var deviceId: String - private lateinit var deviceInstance: ITuyaDevice private var selectedTime: String? = null private var selectedTemp: String? = null @@ -49,21 +47,33 @@ override fun initData() { deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! - //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 - deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) - CommandManager.getTuyaDp(deviceInstance, "16") - deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { - Log.d(kTag, "onDpUpdate: $dpStr") - val parseObject = JSONObject.parseObject(dpStr) - parseObject.keys.forEach { - //{"16":"070009002400120014002400"} - if (it == "16") { + TuyaHomeSdk.getTimerInstance() + .getTimerList("预约时间设定", deviceId, TimerDeviceTypeEnum.DEVICE, object : + ITuyaDataCallback { + override fun onSuccess(result: TimerTask?) { + if (result == null) { + Log.e(kTag, "预约时间未设定") + return + } + Log.d(kTag, result.toJson()) + if (result.timerList.isEmpty()) { + timeConfigSwitch.isChecked = false + } else { + timeConfigSwitch.isChecked = result.timerTaskStatus.isOpen + val last = result.timerList.last() + timeConfigView.text = last.time + val parseObject = JSONObject.parseObject(last.value) + tempConfigView.text = + String.format("水温:${parseObject["16"]}${resources.getString(R.string.temperature_unit)}") } } - } - }) + + override fun onError(errorCode: String?, errorMessage: String?) { + + } + + }) } private val timeConfigLauncher = @@ -83,51 +93,54 @@ timeConfigLauncher.launch(Intent(this, AddTimeConfigActivity::class.java)) } - timeConfigSwitch.setOnCheckedChangeListener { view, isChecked -> - val status = if (isChecked) { - 1 + timeConfigSwitch.setOnClickListener { + if (timeConfigSwitch.isChecked) { + /** + * 循环次数,格式为 0000000,每一位数字的取值可以是 + * 0:关闭 + * 1:开启 + * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 + * 如每个周一循环该任务,则取值为 0100000。 + * 0000000 表示只执行一次,1111111 表示每天执行。 + * + * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, + * 其中 Raw 类型的 DP 需要转换格式, + * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) + * */ + + if (timeConfigView.text.isNullOrBlank() || tempConfigView.text.isNullOrBlank()) { + "操作错误!请先设置定时参数".show(this) + timeConfigSwitch.isChecked = false + return@setOnClickListener + } + +// val dps = mutableMapOf() +// dps["16"] = selectedTemp!! +// val time = mutableMapOf() +// time["time"] = selectedTime!! +// val action = +// "{\"dps\":" + JSONObject.toJSONString(dps) + "," + JSONObject.toJSONString(time) +// .replace("{", "").replace("}", "") + "}" +// Log.d(kTag, "action: $action") + /** + * {"dps":{"16":"36°C"},"time":"10:35"} + * */ + val timeConfig = TimeConfigModel() + val dpsModel = TimeConfigModel.DpsModel() + dpsModel.`_$16` = selectedTemp!! + timeConfig.dps = dpsModel + timeConfig.time = selectedTime!! + + CommandManager.addDeviceTimer( + "预约时间设定", + deviceId, + timeConfig.toJson(), + "0000000", + "热水器" + ) } else { - 0 + CommandManager.deleteDeviceTimer("预约时间设定", deviceId) } - - /** - * 循环次数,格式为 0000000,每一位数字的取值可以是 - * 0:关闭 - * 1:开启 - * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 - * 如每个周一循环该任务,则取值为 0100000。 - * 0000000 表示只执行一次,1111111 表示每天执行。 - * - * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, - * 其中 Raw 类型的 DP 需要转换格式, - * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - * */ - - if (selectedTime.isNullOrBlank() || selectedTemp.isNullOrBlank()) { - "请先设置热水器参数".show(this) - view.isChecked = false - return@setOnCheckedChangeListener - } - val dps = "16".createCommand(selectedTemp!!) - Log.d(kTag, "dps: $dps") - val dpsRaw = String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - val map = HashMap() - map["dps"] = dpsRaw - map["time"] = selectedTime!! - val actions = map.toJson() - - //{"dps":{"16":"36°C"}, "time":"9:20"} - Log.d(kTag, "actions: $actions") - - CommandManager.addDeviceTimer( - "预约时间设定", - deviceId, - "{\"dps\":{\"16\":\"36°C\"}, \"time\":\"9:20\"}", - "0000000", - "热水器", - status, - true - ) } } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml deleted file mode 100644 index a84f957..0000000 --- a/app/src/main/res/layout/activity_splash.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/splash_background.png b/app/src/main/res/mipmap-xxhdpi/splash_background.png deleted file mode 100644 index 3fcca9d..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_background.png +++ /dev/null Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 1a2a9c8..aa65140 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -26,8 +26,6 @@ } private fun startSplashScreenActivity() { - //TODO 不要开屏页 -// navigatePageTo() navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt deleted file mode 100644 index 4fdf7dd..0000000 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.casic.br.view - -import android.annotation.SuppressLint -import android.os.CountDownTimer -import android.view.ViewGroup -import com.casic.br.R -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.qmuiteam.qmui.util.QMUIDisplayHelper -import kotlinx.android.synthetic.main.activity_splash.* - -@SuppressLint("CustomSplashScreen") -class SplashScreenActivity : KotlinBaseActivity() { - - private lateinit var countDownTimer: CountDownTimer - - override fun initLayoutView(): Int = R.layout.activity_splash - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - //根据不同设备状态栏高度设置"跳过"按钮的Margin值 - val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) - val rightMargin = QMUIDisplayHelper.dp2px(this, 10) - if (skipButton.layoutParams is ViewGroup.MarginLayoutParams) { - val params = skipButton.layoutParams as ViewGroup.MarginLayoutParams - params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0) - skipButton.requestLayout() - } - } - - override fun initData() { - countDownTimer = object : CountDownTimer(4000, 1000) { - override fun onFinish() { - startMainActivity() - } - - override fun onTick(millisUntilFinished: Long) { - skipButton.text = String.format("跳过\u3000${(millisUntilFinished / 1000)}s") - } - } - } - - override fun observeRequestState() { - - } - - override fun initEvent() { - countDownTimer.start() - skipButton.setChangeAlphaWhenPress(true) - skipButton.setOnClickListener { - countDownTimer.cancel() - startMainActivity() - } - } - - fun startMainActivity() { - navigatePageTo() - finish() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 0aa82f6..e221d61 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -80,7 +80,6 @@ fragmentPages.add(ServicePageFragment()) deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d(kTag, "onDpUpdate: $dpStr") diff --git a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt index 36f3838..9afd90b 100644 --- a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt @@ -5,9 +5,8 @@ import androidx.activity.result.contract.ActivityResultContracts import com.alibaba.fastjson.JSONObject import com.casic.br.R -import com.casic.br.extensions.createCommand +import com.casic.br.model.TimeConfigModel 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.convertColor @@ -15,10 +14,10 @@ import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.tuya.smart.android.common.utils.Base64 -import com.tuya.smart.android.common.utils.HexUtil +import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk -import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.api.ITuyaDataCallback +import com.tuya.smart.sdk.bean.TimerTask import kotlinx.android.synthetic.main.activity_time_config.* import kotlinx.android.synthetic.main.include_base_title.* @@ -29,7 +28,6 @@ private val kTag = "TimeConfigActivity" private lateinit var deviceId: String - private lateinit var deviceInstance: ITuyaDevice private var selectedTime: String? = null private var selectedTemp: String? = null @@ -49,21 +47,33 @@ override fun initData() { deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! - //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 - deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) - CommandManager.getTuyaDp(deviceInstance, "16") - deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { - Log.d(kTag, "onDpUpdate: $dpStr") - val parseObject = JSONObject.parseObject(dpStr) - parseObject.keys.forEach { - //{"16":"070009002400120014002400"} - if (it == "16") { + TuyaHomeSdk.getTimerInstance() + .getTimerList("预约时间设定", deviceId, TimerDeviceTypeEnum.DEVICE, object : + ITuyaDataCallback { + override fun onSuccess(result: TimerTask?) { + if (result == null) { + Log.e(kTag, "预约时间未设定") + return + } + Log.d(kTag, result.toJson()) + if (result.timerList.isEmpty()) { + timeConfigSwitch.isChecked = false + } else { + timeConfigSwitch.isChecked = result.timerTaskStatus.isOpen + val last = result.timerList.last() + timeConfigView.text = last.time + val parseObject = JSONObject.parseObject(last.value) + tempConfigView.text = + String.format("水温:${parseObject["16"]}${resources.getString(R.string.temperature_unit)}") } } - } - }) + + override fun onError(errorCode: String?, errorMessage: String?) { + + } + + }) } private val timeConfigLauncher = @@ -83,51 +93,54 @@ timeConfigLauncher.launch(Intent(this, AddTimeConfigActivity::class.java)) } - timeConfigSwitch.setOnCheckedChangeListener { view, isChecked -> - val status = if (isChecked) { - 1 + timeConfigSwitch.setOnClickListener { + if (timeConfigSwitch.isChecked) { + /** + * 循环次数,格式为 0000000,每一位数字的取值可以是 + * 0:关闭 + * 1:开启 + * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 + * 如每个周一循环该任务,则取值为 0100000。 + * 0000000 表示只执行一次,1111111 表示每天执行。 + * + * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, + * 其中 Raw 类型的 DP 需要转换格式, + * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) + * */ + + if (timeConfigView.text.isNullOrBlank() || tempConfigView.text.isNullOrBlank()) { + "操作错误!请先设置定时参数".show(this) + timeConfigSwitch.isChecked = false + return@setOnClickListener + } + +// val dps = mutableMapOf() +// dps["16"] = selectedTemp!! +// val time = mutableMapOf() +// time["time"] = selectedTime!! +// val action = +// "{\"dps\":" + JSONObject.toJSONString(dps) + "," + JSONObject.toJSONString(time) +// .replace("{", "").replace("}", "") + "}" +// Log.d(kTag, "action: $action") + /** + * {"dps":{"16":"36°C"},"time":"10:35"} + * */ + val timeConfig = TimeConfigModel() + val dpsModel = TimeConfigModel.DpsModel() + dpsModel.`_$16` = selectedTemp!! + timeConfig.dps = dpsModel + timeConfig.time = selectedTime!! + + CommandManager.addDeviceTimer( + "预约时间设定", + deviceId, + timeConfig.toJson(), + "0000000", + "热水器" + ) } else { - 0 + CommandManager.deleteDeviceTimer("预约时间设定", deviceId) } - - /** - * 循环次数,格式为 0000000,每一位数字的取值可以是 - * 0:关闭 - * 1:开启 - * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 - * 如每个周一循环该任务,则取值为 0100000。 - * 0000000 表示只执行一次,1111111 表示每天执行。 - * - * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, - * 其中 Raw 类型的 DP 需要转换格式, - * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - * */ - - if (selectedTime.isNullOrBlank() || selectedTemp.isNullOrBlank()) { - "请先设置热水器参数".show(this) - view.isChecked = false - return@setOnCheckedChangeListener - } - val dps = "16".createCommand(selectedTemp!!) - Log.d(kTag, "dps: $dps") - val dpsRaw = String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - val map = HashMap() - map["dps"] = dpsRaw - map["time"] = selectedTime!! - val actions = map.toJson() - - //{"dps":{"16":"36°C"}, "time":"9:20"} - Log.d(kTag, "actions: $actions") - - CommandManager.addDeviceTimer( - "预约时间设定", - deviceId, - "{\"dps\":{\"16\":\"36°C\"}, \"time\":\"9:20\"}", - "0000000", - "热水器", - status, - true - ) } } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml deleted file mode 100644 index a84f957..0000000 --- a/app/src/main/res/layout/activity_splash.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/splash_background.png b/app/src/main/res/mipmap-xxhdpi/splash_background.png deleted file mode 100644 index 3fcca9d..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_background.png +++ /dev/null Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/splash_casic.png b/app/src/main/res/mipmap-xxhdpi/splash_casic.png deleted file mode 100644 index 37c7e47..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_casic.png +++ /dev/null Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 1a2a9c8..aa65140 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -26,8 +26,6 @@ } private fun startSplashScreenActivity() { - //TODO 不要开屏页 -// navigatePageTo() navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt deleted file mode 100644 index 4fdf7dd..0000000 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.casic.br.view - -import android.annotation.SuppressLint -import android.os.CountDownTimer -import android.view.ViewGroup -import com.casic.br.R -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.qmuiteam.qmui.util.QMUIDisplayHelper -import kotlinx.android.synthetic.main.activity_splash.* - -@SuppressLint("CustomSplashScreen") -class SplashScreenActivity : KotlinBaseActivity() { - - private lateinit var countDownTimer: CountDownTimer - - override fun initLayoutView(): Int = R.layout.activity_splash - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - //根据不同设备状态栏高度设置"跳过"按钮的Margin值 - val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) - val rightMargin = QMUIDisplayHelper.dp2px(this, 10) - if (skipButton.layoutParams is ViewGroup.MarginLayoutParams) { - val params = skipButton.layoutParams as ViewGroup.MarginLayoutParams - params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0) - skipButton.requestLayout() - } - } - - override fun initData() { - countDownTimer = object : CountDownTimer(4000, 1000) { - override fun onFinish() { - startMainActivity() - } - - override fun onTick(millisUntilFinished: Long) { - skipButton.text = String.format("跳过\u3000${(millisUntilFinished / 1000)}s") - } - } - } - - override fun observeRequestState() { - - } - - override fun initEvent() { - countDownTimer.start() - skipButton.setChangeAlphaWhenPress(true) - skipButton.setOnClickListener { - countDownTimer.cancel() - startMainActivity() - } - } - - fun startMainActivity() { - navigatePageTo() - finish() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 0aa82f6..e221d61 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -80,7 +80,6 @@ fragmentPages.add(ServicePageFragment()) deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d(kTag, "onDpUpdate: $dpStr") diff --git a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt index 36f3838..9afd90b 100644 --- a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt @@ -5,9 +5,8 @@ import androidx.activity.result.contract.ActivityResultContracts import com.alibaba.fastjson.JSONObject import com.casic.br.R -import com.casic.br.extensions.createCommand +import com.casic.br.model.TimeConfigModel 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.convertColor @@ -15,10 +14,10 @@ import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.tuya.smart.android.common.utils.Base64 -import com.tuya.smart.android.common.utils.HexUtil +import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk -import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.api.ITuyaDataCallback +import com.tuya.smart.sdk.bean.TimerTask import kotlinx.android.synthetic.main.activity_time_config.* import kotlinx.android.synthetic.main.include_base_title.* @@ -29,7 +28,6 @@ private val kTag = "TimeConfigActivity" private lateinit var deviceId: String - private lateinit var deviceInstance: ITuyaDevice private var selectedTime: String? = null private var selectedTemp: String? = null @@ -49,21 +47,33 @@ override fun initData() { deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! - //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 - deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) - CommandManager.getTuyaDp(deviceInstance, "16") - deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { - Log.d(kTag, "onDpUpdate: $dpStr") - val parseObject = JSONObject.parseObject(dpStr) - parseObject.keys.forEach { - //{"16":"070009002400120014002400"} - if (it == "16") { + TuyaHomeSdk.getTimerInstance() + .getTimerList("预约时间设定", deviceId, TimerDeviceTypeEnum.DEVICE, object : + ITuyaDataCallback { + override fun onSuccess(result: TimerTask?) { + if (result == null) { + Log.e(kTag, "预约时间未设定") + return + } + Log.d(kTag, result.toJson()) + if (result.timerList.isEmpty()) { + timeConfigSwitch.isChecked = false + } else { + timeConfigSwitch.isChecked = result.timerTaskStatus.isOpen + val last = result.timerList.last() + timeConfigView.text = last.time + val parseObject = JSONObject.parseObject(last.value) + tempConfigView.text = + String.format("水温:${parseObject["16"]}${resources.getString(R.string.temperature_unit)}") } } - } - }) + + override fun onError(errorCode: String?, errorMessage: String?) { + + } + + }) } private val timeConfigLauncher = @@ -83,51 +93,54 @@ timeConfigLauncher.launch(Intent(this, AddTimeConfigActivity::class.java)) } - timeConfigSwitch.setOnCheckedChangeListener { view, isChecked -> - val status = if (isChecked) { - 1 + timeConfigSwitch.setOnClickListener { + if (timeConfigSwitch.isChecked) { + /** + * 循环次数,格式为 0000000,每一位数字的取值可以是 + * 0:关闭 + * 1:开启 + * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 + * 如每个周一循环该任务,则取值为 0100000。 + * 0000000 表示只执行一次,1111111 表示每天执行。 + * + * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, + * 其中 Raw 类型的 DP 需要转换格式, + * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) + * */ + + if (timeConfigView.text.isNullOrBlank() || tempConfigView.text.isNullOrBlank()) { + "操作错误!请先设置定时参数".show(this) + timeConfigSwitch.isChecked = false + return@setOnClickListener + } + +// val dps = mutableMapOf() +// dps["16"] = selectedTemp!! +// val time = mutableMapOf() +// time["time"] = selectedTime!! +// val action = +// "{\"dps\":" + JSONObject.toJSONString(dps) + "," + JSONObject.toJSONString(time) +// .replace("{", "").replace("}", "") + "}" +// Log.d(kTag, "action: $action") + /** + * {"dps":{"16":"36°C"},"time":"10:35"} + * */ + val timeConfig = TimeConfigModel() + val dpsModel = TimeConfigModel.DpsModel() + dpsModel.`_$16` = selectedTemp!! + timeConfig.dps = dpsModel + timeConfig.time = selectedTime!! + + CommandManager.addDeviceTimer( + "预约时间设定", + deviceId, + timeConfig.toJson(), + "0000000", + "热水器" + ) } else { - 0 + CommandManager.deleteDeviceTimer("预约时间设定", deviceId) } - - /** - * 循环次数,格式为 0000000,每一位数字的取值可以是 - * 0:关闭 - * 1:开启 - * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 - * 如每个周一循环该任务,则取值为 0100000。 - * 0000000 表示只执行一次,1111111 表示每天执行。 - * - * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, - * 其中 Raw 类型的 DP 需要转换格式, - * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - * */ - - if (selectedTime.isNullOrBlank() || selectedTemp.isNullOrBlank()) { - "请先设置热水器参数".show(this) - view.isChecked = false - return@setOnCheckedChangeListener - } - val dps = "16".createCommand(selectedTemp!!) - Log.d(kTag, "dps: $dps") - val dpsRaw = String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - val map = HashMap() - map["dps"] = dpsRaw - map["time"] = selectedTime!! - val actions = map.toJson() - - //{"dps":{"16":"36°C"}, "time":"9:20"} - Log.d(kTag, "actions: $actions") - - CommandManager.addDeviceTimer( - "预约时间设定", - deviceId, - "{\"dps\":{\"16\":\"36°C\"}, \"time\":\"9:20\"}", - "0000000", - "热水器", - status, - true - ) } } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml deleted file mode 100644 index a84f957..0000000 --- a/app/src/main/res/layout/activity_splash.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/splash_background.png b/app/src/main/res/mipmap-xxhdpi/splash_background.png deleted file mode 100644 index 3fcca9d..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_background.png +++ /dev/null Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/splash_casic.png b/app/src/main/res/mipmap-xxhdpi/splash_casic.png deleted file mode 100644 index 37c7e47..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_casic.png +++ /dev/null Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/splash_logo.png b/app/src/main/res/mipmap-xxhdpi/splash_logo.png deleted file mode 100644 index ac2ba0c..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_logo.png +++ /dev/null Binary files differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 445738d..1cc04ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,6 @@ - diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt index d5c9eea..2a8c6e9 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/ControlPageFragment.kt @@ -189,10 +189,18 @@ } "9" -> {//温度设置 - + val tempValue = parseObject[it] as Int + //转为刻度 + temperatureSlider.currentProgress = tempValue - minTemp } "111" -> {//厨房定时 - + val timeValue = parseObject[it] + timeScope.forEachIndexed { index, i -> + if (i == timeValue) { + timeSeekBar.currentProgress = index + return@forEach + } + } } } } diff --git a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt index 62978dc..206fbff 100644 --- a/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/waterheater/StatusPageFragment.kt @@ -55,6 +55,12 @@ } else { "0" } + deviceStatusSwitch.isChecked = isDeviceWorking + deviceStateView.text = if (isDeviceWorking) { + "已开机" + } else { + "已关机" + } paramObject.put("workStatus", switchStatus) paramObject.put("switchStatus", switchStatus) } @@ -74,6 +80,14 @@ ) paramObject.put("currentTemperature", currentTempView.text) } + "13" -> { + deviceStateView.text = when (parseObject[it] as String) { + "guanji" -> "已关机" + "gongzuozhong" -> "工作中" + "guzhang" -> "故障" + else -> "已开机" + } + } } } } @@ -102,7 +116,6 @@ wifiLayout.visibility = View.GONE paramObject.put("wifiStatus", "OFF") } - deviceStatusSwitch.isChecked = isDeviceWorking } override fun observeRequestState() { diff --git a/app/src/main/java/com/casic/br/model/TimeConfigModel.java b/app/src/main/java/com/casic/br/model/TimeConfigModel.java new file mode 100644 index 0000000..341388b --- /dev/null +++ b/app/src/main/java/com/casic/br/model/TimeConfigModel.java @@ -0,0 +1,38 @@ +package com.casic.br.model; + +import com.google.gson.annotations.SerializedName; + +public class TimeConfigModel { + + private DpsModel dps; + private String time; + + public DpsModel getDps() { + return dps; + } + + public void setDps(DpsModel dps) { + this.dps = dps; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public static class DpsModel { + @SerializedName("16") + private String _$16; + + public String get_$16() { + return _$16; + } + + public void set_$16(String _$16) { + this._$16 = _$16; + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/CommandManager.kt b/app/src/main/java/com/casic/br/utils/CommandManager.kt index 60ccad8..b371e13 100644 --- a/app/src/main/java/com/casic/br/utils/CommandManager.kt +++ b/app/src/main/java/com/casic/br/utils/CommandManager.kt @@ -4,6 +4,7 @@ import com.tuya.smart.android.device.builder.TuyaTimerBuilder import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk +import com.tuya.smart.home.sdk.constant.TimerUpdateEnum import com.tuya.smart.sdk.api.IResultCallback import com.tuya.smart.sdk.api.ITuyaDevice @@ -35,10 +36,8 @@ }) } - //TODO 待涂鸦确认 fun addDeviceTimer( - taskName: String, deviceId: String, dps: String, loops: String, aliasName: String, - status: Int, appPush: Boolean + taskName: String, deviceId: String, dps: String, loops: String, aliasName: String ) { val builder = TuyaTimerBuilder.Builder() .taskName(taskName) @@ -47,12 +46,12 @@ .actions(dps) .loops(loops) .aliasName(aliasName) - .status(status) - .appPush(appPush) + .status(1) + .appPush(true) .build() TuyaHomeSdk.getTimerInstance().addTimer(builder, object : IResultCallback { override fun onError(code: String?, error: String?) { - + Log.e(kTag, "code: $code --- onError: $error") } override fun onSuccess() { @@ -60,4 +59,21 @@ } }) } + + fun deleteDeviceTimer(taskName: String, deviceId: String) { + TuyaHomeSdk.getTimerInstance().updateCategoryTimerStatus( + taskName, + deviceId, + TimerDeviceTypeEnum.DEVICE, + TimerUpdateEnum.DELETE, + object : IResultCallback { + override fun onError(code: String?, error: String?) { + Log.e(kTag, "code: $code --- onError: $error") + } + + override fun onSuccess() { + + } + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/view/PermissionActivity.kt index 1a2a9c8..aa65140 100644 --- a/app/src/main/java/com/casic/br/view/PermissionActivity.kt +++ b/app/src/main/java/com/casic/br/view/PermissionActivity.kt @@ -26,8 +26,6 @@ } private fun startSplashScreenActivity() { - //TODO 不要开屏页 -// navigatePageTo() navigatePageTo() finish() } diff --git a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt b/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt deleted file mode 100644 index 4fdf7dd..0000000 --- a/app/src/main/java/com/casic/br/view/SplashScreenActivity.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.casic.br.view - -import android.annotation.SuppressLint -import android.os.CountDownTimer -import android.view.ViewGroup -import com.casic.br.R -import com.gyf.immersionbar.ImmersionBar -import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.extensions.navigatePageTo -import com.qmuiteam.qmui.util.QMUIDisplayHelper -import kotlinx.android.synthetic.main.activity_splash.* - -@SuppressLint("CustomSplashScreen") -class SplashScreenActivity : KotlinBaseActivity() { - - private lateinit var countDownTimer: CountDownTimer - - override fun initLayoutView(): Int = R.layout.activity_splash - - override fun setupTopBarLayout() { - ImmersionBar.with(this).statusBarDarkFont(false).init() - //根据不同设备状态栏高度设置"跳过"按钮的Margin值 - val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(this) - val rightMargin = QMUIDisplayHelper.dp2px(this, 10) - if (skipButton.layoutParams is ViewGroup.MarginLayoutParams) { - val params = skipButton.layoutParams as ViewGroup.MarginLayoutParams - params.setMargins(skipButton.width, statusBarHeight, rightMargin, 0) - skipButton.requestLayout() - } - } - - override fun initData() { - countDownTimer = object : CountDownTimer(4000, 1000) { - override fun onFinish() { - startMainActivity() - } - - override fun onTick(millisUntilFinished: Long) { - skipButton.text = String.format("跳过\u3000${(millisUntilFinished / 1000)}s") - } - } - } - - override fun observeRequestState() { - - } - - override fun initEvent() { - countDownTimer.start() - skipButton.setChangeAlphaWhenPress(true) - skipButton.setOnClickListener { - countDownTimer.cancel() - startMainActivity() - } - } - - fun startMainActivity() { - navigatePageTo() - finish() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt index 0aa82f6..e221d61 100644 --- a/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/WaterHeaterActivity.kt @@ -80,7 +80,6 @@ fragmentPages.add(ServicePageFragment()) deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { Log.d(kTag, "onDpUpdate: $dpStr") diff --git a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt index 36f3838..9afd90b 100644 --- a/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt +++ b/app/src/main/java/com/casic/br/view/device/waterheater/TimeConfigActivity.kt @@ -5,9 +5,8 @@ import androidx.activity.result.contract.ActivityResultContracts import com.alibaba.fastjson.JSONObject import com.casic.br.R -import com.casic.br.extensions.createCommand +import com.casic.br.model.TimeConfigModel 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.convertColor @@ -15,10 +14,10 @@ import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil -import com.tuya.smart.android.common.utils.Base64 -import com.tuya.smart.android.common.utils.HexUtil +import com.tuya.smart.android.device.enums.TimerDeviceTypeEnum import com.tuya.smart.home.sdk.TuyaHomeSdk -import com.tuya.smart.sdk.api.ITuyaDevice +import com.tuya.smart.sdk.api.ITuyaDataCallback +import com.tuya.smart.sdk.bean.TimerTask import kotlinx.android.synthetic.main.activity_time_config.* import kotlinx.android.synthetic.main.include_base_title.* @@ -29,7 +28,6 @@ private val kTag = "TimeConfigActivity" private lateinit var deviceId: String - private lateinit var deviceInstance: ITuyaDevice private var selectedTime: String? = null private var selectedTemp: String? = null @@ -49,21 +47,33 @@ override fun initData() { deviceId = intent.getStringExtra(Constant.INTENT_PARAM)!! - //控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。 - deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId) - CommandManager.getTuyaDp(deviceInstance, "16") - deviceInstance.registerDevListener(object : TuyaDeviceListener() { - override fun onDpUpdate(devId: String?, dpStr: String?) { - Log.d(kTag, "onDpUpdate: $dpStr") - val parseObject = JSONObject.parseObject(dpStr) - parseObject.keys.forEach { - //{"16":"070009002400120014002400"} - if (it == "16") { + TuyaHomeSdk.getTimerInstance() + .getTimerList("预约时间设定", deviceId, TimerDeviceTypeEnum.DEVICE, object : + ITuyaDataCallback { + override fun onSuccess(result: TimerTask?) { + if (result == null) { + Log.e(kTag, "预约时间未设定") + return + } + Log.d(kTag, result.toJson()) + if (result.timerList.isEmpty()) { + timeConfigSwitch.isChecked = false + } else { + timeConfigSwitch.isChecked = result.timerTaskStatus.isOpen + val last = result.timerList.last() + timeConfigView.text = last.time + val parseObject = JSONObject.parseObject(last.value) + tempConfigView.text = + String.format("水温:${parseObject["16"]}${resources.getString(R.string.temperature_unit)}") } } - } - }) + + override fun onError(errorCode: String?, errorMessage: String?) { + + } + + }) } private val timeConfigLauncher = @@ -83,51 +93,54 @@ timeConfigLauncher.launch(Intent(this, AddTimeConfigActivity::class.java)) } - timeConfigSwitch.setOnCheckedChangeListener { view, isChecked -> - val status = if (isChecked) { - 1 + timeConfigSwitch.setOnClickListener { + if (timeConfigSwitch.isChecked) { + /** + * 循环次数,格式为 0000000,每一位数字的取值可以是 + * 0:关闭 + * 1:开启 + * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 + * 如每个周一循环该任务,则取值为 0100000。 + * 0000000 表示只执行一次,1111111 表示每天执行。 + * + * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, + * 其中 Raw 类型的 DP 需要转换格式, + * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) + * */ + + if (timeConfigView.text.isNullOrBlank() || tempConfigView.text.isNullOrBlank()) { + "操作错误!请先设置定时参数".show(this) + timeConfigSwitch.isChecked = false + return@setOnClickListener + } + +// val dps = mutableMapOf() +// dps["16"] = selectedTemp!! +// val time = mutableMapOf() +// time["time"] = selectedTime!! +// val action = +// "{\"dps\":" + JSONObject.toJSONString(dps) + "," + JSONObject.toJSONString(time) +// .replace("{", "").replace("}", "") + "}" +// Log.d(kTag, "action: $action") + /** + * {"dps":{"16":"36°C"},"time":"10:35"} + * */ + val timeConfig = TimeConfigModel() + val dpsModel = TimeConfigModel.DpsModel() + dpsModel.`_$16` = selectedTemp!! + timeConfig.dps = dpsModel + timeConfig.time = selectedTime!! + + CommandManager.addDeviceTimer( + "预约时间设定", + deviceId, + timeConfig.toJson(), + "0000000", + "热水器" + ) } else { - 0 + CommandManager.deleteDeviceTimer("预约时间设定", deviceId) } - - /** - * 循环次数,格式为 0000000,每一位数字的取值可以是 - * 0:关闭 - * 1:开启 - * 从左至右依次表示周日、周一、周二、周三、周四、周五、周六。 - * 如每个周一循环该任务,则取值为 0100000。 - * 0000000 表示只执行一次,1111111 表示每天执行。 - * - * 设备功能(dps)的操作任务的 JSON 格式表达方式,格式为 {"dps":{}, "time":""}, - * 其中 Raw 类型的 DP 需要转换格式, - * 转换方式为:new String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - * */ - - if (selectedTime.isNullOrBlank() || selectedTemp.isNullOrBlank()) { - "请先设置热水器参数".show(this) - view.isChecked = false - return@setOnCheckedChangeListener - } - val dps = "16".createCommand(selectedTemp!!) - Log.d(kTag, "dps: $dps") - val dpsRaw = String(Base64.encodeBase64(HexUtil.hexStringToBytes(dps))) - val map = HashMap() - map["dps"] = dpsRaw - map["time"] = selectedTime!! - val actions = map.toJson() - - //{"dps":{"16":"36°C"}, "time":"9:20"} - Log.d(kTag, "actions: $actions") - - CommandManager.addDeviceTimer( - "预约时间设定", - deviceId, - "{\"dps\":{\"16\":\"36°C\"}, \"time\":\"9:20\"}", - "0000000", - "热水器", - status, - true - ) } } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml deleted file mode 100644 index a84f957..0000000 --- a/app/src/main/res/layout/activity_splash.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/splash_background.png b/app/src/main/res/mipmap-xxhdpi/splash_background.png deleted file mode 100644 index 3fcca9d..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_background.png +++ /dev/null Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/splash_casic.png b/app/src/main/res/mipmap-xxhdpi/splash_casic.png deleted file mode 100644 index 37c7e47..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_casic.png +++ /dev/null Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/splash_logo.png b/app/src/main/res/mipmap-xxhdpi/splash_logo.png deleted file mode 100644 index ac2ba0c..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_logo.png +++ /dev/null Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/splash_text.png b/app/src/main/res/mipmap-xxhdpi/splash_text.png deleted file mode 100644 index 4f130d5..0000000 --- a/app/src/main/res/mipmap-xxhdpi/splash_text.png +++ /dev/null Binary files differ