diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 5d4dff1..3d8536d 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -2,14 +2,12 @@
import android.graphics.Color
import android.util.Log
-import com.bumptech.glide.Glide
-import com.bumptech.glide.request.RequestOptions
import com.casic.br.R
import com.casic.br.extensions.compressImage
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.GlideLoadEngine
import com.casic.br.utils.LocaleConstant
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 5d4dff1..3d8536d 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -2,14 +2,12 @@
import android.graphics.Color
import android.util.Log
-import com.bumptech.glide.Glide
-import com.bumptech.glide.request.RequestOptions
import com.casic.br.R
import com.casic.br.extensions.compressImage
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.GlideLoadEngine
import com.casic.br.utils.LocaleConstant
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index cc88165..a2fb29a 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,6 +1,5 @@
package com.casic.br.view
-import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -8,19 +7,13 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
-import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
- private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -40,27 +33,7 @@
}
override fun initData() {
- /**
- * TODO 需要改为实际情况
- *
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- SaveKeyValues.putValue(LocaleConstant.HOME_ID, bean?.homeId.toString())
- }
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
}
override fun observeRequestState() {
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 5d4dff1..3d8536d 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -2,14 +2,12 @@
import android.graphics.Color
import android.util.Log
-import com.bumptech.glide.Glide
-import com.bumptech.glide.request.RequestOptions
import com.casic.br.R
import com.casic.br.extensions.compressImage
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.GlideLoadEngine
import com.casic.br.utils.LocaleConstant
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index cc88165..a2fb29a 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,6 +1,5 @@
package com.casic.br.view
-import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -8,19 +7,13 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
-import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
- private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -40,27 +33,7 @@
}
override fun initData() {
- /**
- * TODO 需要改为实际情况
- *
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- SaveKeyValues.putValue(LocaleConstant.HOME_ID, bean?.homeId.toString())
- }
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
index 96510fb..59875ea 100644
--- a/app/src/main/java/com/casic/br/view/RegisterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -2,17 +2,24 @@
import android.content.Context
import android.os.CountDownTimer
+import android.util.Log
+import com.amap.api.location.AMapLocation
import com.casic.br.R
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.LocationHelper
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.isPhoneNumber
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.tuya.smart.android.user.api.IRegisterCallback
import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import com.tuya.smart.sdk.api.IResultCallback
import kotlinx.android.synthetic.main.activity_register.*
import kotlinx.android.synthetic.main.include_left_back_title.*
@@ -95,19 +102,51 @@
}
LoadingDialogHub.show(this, "注册中,请稍后")
- TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
- "86", userPhone, userPassword, smsCode,
- object : IRegisterCallback {
- override fun onSuccess(user: User?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
- override fun onError(code: String?, error: String?) {
- LoadingDialogHub.dismiss()
- "用户注册失败".show(context)
+ LocationHelper.obtainCurrentLocation(this, object : LocationHelper.ILocationListener {
+ override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
+ /**
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ if (aMapLocation == null) {
+ return
}
- })
+ TuyaHomeSdk.getHomeManagerInstance().createHome(
+ "${userPhone}的家", aMapLocation.longitude, aMapLocation.latitude,
+ aMapLocation.address, arrayListOf("1"), object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(
+ LocaleConstant.HOME_ID, bean?.homeId.toString()
+ )
+
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ //TODO 调用自己后台接口
+ Log.d(
+ kTag, "onAMapLocationGet: ${aMapLocation.province}"
+ )
+
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
+ })
}
}
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 5d4dff1..3d8536d 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -2,14 +2,12 @@
import android.graphics.Color
import android.util.Log
-import com.bumptech.glide.Glide
-import com.bumptech.glide.request.RequestOptions
import com.casic.br.R
import com.casic.br.extensions.compressImage
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.GlideLoadEngine
import com.casic.br.utils.LocaleConstant
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index cc88165..a2fb29a 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,6 +1,5 @@
package com.casic.br.view
-import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -8,19 +7,13 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
-import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
- private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -40,27 +33,7 @@
}
override fun initData() {
- /**
- * TODO 需要改为实际情况
- *
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- SaveKeyValues.putValue(LocaleConstant.HOME_ID, bean?.homeId.toString())
- }
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
index 96510fb..59875ea 100644
--- a/app/src/main/java/com/casic/br/view/RegisterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -2,17 +2,24 @@
import android.content.Context
import android.os.CountDownTimer
+import android.util.Log
+import com.amap.api.location.AMapLocation
import com.casic.br.R
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.LocationHelper
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.isPhoneNumber
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.tuya.smart.android.user.api.IRegisterCallback
import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import com.tuya.smart.sdk.api.IResultCallback
import kotlinx.android.synthetic.main.activity_register.*
import kotlinx.android.synthetic.main.include_left_back_title.*
@@ -95,19 +102,51 @@
}
LoadingDialogHub.show(this, "注册中,请稍后")
- TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
- "86", userPhone, userPassword, smsCode,
- object : IRegisterCallback {
- override fun onSuccess(user: User?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
- override fun onError(code: String?, error: String?) {
- LoadingDialogHub.dismiss()
- "用户注册失败".show(context)
+ LocationHelper.obtainCurrentLocation(this, object : LocationHelper.ILocationListener {
+ override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
+ /**
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ if (aMapLocation == null) {
+ return
}
- })
+ TuyaHomeSdk.getHomeManagerInstance().createHome(
+ "${userPhone}的家", aMapLocation.longitude, aMapLocation.latitude,
+ aMapLocation.address, arrayListOf("1"), object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(
+ LocaleConstant.HOME_ID, bean?.homeId.toString()
+ )
+
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ //TODO 调用自己后台接口
+ Log.d(
+ kTag, "onAMapLocationGet: ${aMapLocation.province}"
+ )
+
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 2d1e332..240636c 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -54,18 +54,18 @@
//控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
-// val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
-// if (deviceBean == null) {
-// "查询设备信息失败,请检查设备是否已离线".show(this)
-// return
-// }
-// titleView.text = "万家乐壁挂炉"
-// Glide.with(this)
-// .load(deviceBean.iconUrl)
-// .placeholder(R.mipmap.load_image_error)
-// .into(deviceLogoView)
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = "万家乐壁挂炉"
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
@@ -73,20 +73,20 @@
override fun onDpUpdate(devId: String?, dpStr: String?) {
Log.d(kTag, "onDpUpdate: $dpStr")
-// val controlMsg = ControlPageFragment.weakReference.obtainMessage()
-// controlMsg.what = 2022092901
-// controlMsg.obj = dpStr
-// ControlPageFragment.weakReference.sendMessage(controlMsg)
-//
-// val statusMsg = StatusPageFragment.weakReference.obtainMessage()
-// statusMsg.what = 2022092902
-// statusMsg.obj = dpStr
-// StatusPageFragment.weakReference.sendMessage(statusMsg)
-//
-// val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
-// deviceBeanMsg.what = 2022092903
-// deviceBeanMsg.obj = deviceBean
-// StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
+ val controlMsg = ControlPageFragment.weakReference.obtainMessage()
+ controlMsg.what = 2022092901
+ controlMsg.obj = dpStr
+ ControlPageFragment.weakReference.sendMessage(controlMsg)
+
+ val statusMsg = StatusPageFragment.weakReference.obtainMessage()
+ statusMsg.what = 2022092902
+ statusMsg.obj = dpStr
+ StatusPageFragment.weakReference.sendMessage(statusMsg)
+
+ val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
+ deviceBeanMsg.what = 2022092903
+ deviceBeanMsg.obj = deviceBean
+ StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
}
})
}
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 5d4dff1..3d8536d 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -2,14 +2,12 @@
import android.graphics.Color
import android.util.Log
-import com.bumptech.glide.Glide
-import com.bumptech.glide.request.RequestOptions
import com.casic.br.R
import com.casic.br.extensions.compressImage
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.GlideLoadEngine
import com.casic.br.utils.LocaleConstant
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index cc88165..a2fb29a 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,6 +1,5 @@
package com.casic.br.view
-import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -8,19 +7,13 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
-import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
- private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -40,27 +33,7 @@
}
override fun initData() {
- /**
- * TODO 需要改为实际情况
- *
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- SaveKeyValues.putValue(LocaleConstant.HOME_ID, bean?.homeId.toString())
- }
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
index 96510fb..59875ea 100644
--- a/app/src/main/java/com/casic/br/view/RegisterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -2,17 +2,24 @@
import android.content.Context
import android.os.CountDownTimer
+import android.util.Log
+import com.amap.api.location.AMapLocation
import com.casic.br.R
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.LocationHelper
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.isPhoneNumber
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.tuya.smart.android.user.api.IRegisterCallback
import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import com.tuya.smart.sdk.api.IResultCallback
import kotlinx.android.synthetic.main.activity_register.*
import kotlinx.android.synthetic.main.include_left_back_title.*
@@ -95,19 +102,51 @@
}
LoadingDialogHub.show(this, "注册中,请稍后")
- TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
- "86", userPhone, userPassword, smsCode,
- object : IRegisterCallback {
- override fun onSuccess(user: User?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
- override fun onError(code: String?, error: String?) {
- LoadingDialogHub.dismiss()
- "用户注册失败".show(context)
+ LocationHelper.obtainCurrentLocation(this, object : LocationHelper.ILocationListener {
+ override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
+ /**
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ if (aMapLocation == null) {
+ return
}
- })
+ TuyaHomeSdk.getHomeManagerInstance().createHome(
+ "${userPhone}的家", aMapLocation.longitude, aMapLocation.latitude,
+ aMapLocation.address, arrayListOf("1"), object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(
+ LocaleConstant.HOME_ID, bean?.homeId.toString()
+ )
+
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ //TODO 调用自己后台接口
+ Log.d(
+ kTag, "onAMapLocationGet: ${aMapLocation.province}"
+ )
+
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 2d1e332..240636c 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -54,18 +54,18 @@
//控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
-// val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
-// if (deviceBean == null) {
-// "查询设备信息失败,请检查设备是否已离线".show(this)
-// return
-// }
-// titleView.text = "万家乐壁挂炉"
-// Glide.with(this)
-// .load(deviceBean.iconUrl)
-// .placeholder(R.mipmap.load_image_error)
-// .into(deviceLogoView)
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = "万家乐壁挂炉"
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
@@ -73,20 +73,20 @@
override fun onDpUpdate(devId: String?, dpStr: String?) {
Log.d(kTag, "onDpUpdate: $dpStr")
-// val controlMsg = ControlPageFragment.weakReference.obtainMessage()
-// controlMsg.what = 2022092901
-// controlMsg.obj = dpStr
-// ControlPageFragment.weakReference.sendMessage(controlMsg)
-//
-// val statusMsg = StatusPageFragment.weakReference.obtainMessage()
-// statusMsg.what = 2022092902
-// statusMsg.obj = dpStr
-// StatusPageFragment.weakReference.sendMessage(statusMsg)
-//
-// val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
-// deviceBeanMsg.what = 2022092903
-// deviceBeanMsg.obj = deviceBean
-// StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
+ val controlMsg = ControlPageFragment.weakReference.obtainMessage()
+ controlMsg.what = 2022092901
+ controlMsg.obj = dpStr
+ ControlPageFragment.weakReference.sendMessage(controlMsg)
+
+ val statusMsg = StatusPageFragment.weakReference.obtainMessage()
+ statusMsg.what = 2022092902
+ statusMsg.obj = dpStr
+ StatusPageFragment.weakReference.sendMessage(statusMsg)
+
+ val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
+ deviceBeanMsg.what = 2022092903
+ deviceBeanMsg.obj = deviceBean
+ StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
}
})
}
diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
index 79598a9..8428daa 100644
--- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
@@ -65,7 +65,7 @@
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 5d4dff1..3d8536d 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -2,14 +2,12 @@
import android.graphics.Color
import android.util.Log
-import com.bumptech.glide.Glide
-import com.bumptech.glide.request.RequestOptions
import com.casic.br.R
import com.casic.br.extensions.compressImage
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.GlideLoadEngine
import com.casic.br.utils.LocaleConstant
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index cc88165..a2fb29a 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,6 +1,5 @@
package com.casic.br.view
-import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -8,19 +7,13 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
-import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
- private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -40,27 +33,7 @@
}
override fun initData() {
- /**
- * TODO 需要改为实际情况
- *
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- SaveKeyValues.putValue(LocaleConstant.HOME_ID, bean?.homeId.toString())
- }
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
index 96510fb..59875ea 100644
--- a/app/src/main/java/com/casic/br/view/RegisterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -2,17 +2,24 @@
import android.content.Context
import android.os.CountDownTimer
+import android.util.Log
+import com.amap.api.location.AMapLocation
import com.casic.br.R
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.LocationHelper
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.isPhoneNumber
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.tuya.smart.android.user.api.IRegisterCallback
import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import com.tuya.smart.sdk.api.IResultCallback
import kotlinx.android.synthetic.main.activity_register.*
import kotlinx.android.synthetic.main.include_left_back_title.*
@@ -95,19 +102,51 @@
}
LoadingDialogHub.show(this, "注册中,请稍后")
- TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
- "86", userPhone, userPassword, smsCode,
- object : IRegisterCallback {
- override fun onSuccess(user: User?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
- override fun onError(code: String?, error: String?) {
- LoadingDialogHub.dismiss()
- "用户注册失败".show(context)
+ LocationHelper.obtainCurrentLocation(this, object : LocationHelper.ILocationListener {
+ override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
+ /**
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ if (aMapLocation == null) {
+ return
}
- })
+ TuyaHomeSdk.getHomeManagerInstance().createHome(
+ "${userPhone}的家", aMapLocation.longitude, aMapLocation.latitude,
+ aMapLocation.address, arrayListOf("1"), object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(
+ LocaleConstant.HOME_ID, bean?.homeId.toString()
+ )
+
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ //TODO 调用自己后台接口
+ Log.d(
+ kTag, "onAMapLocationGet: ${aMapLocation.province}"
+ )
+
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 2d1e332..240636c 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -54,18 +54,18 @@
//控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
-// val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
-// if (deviceBean == null) {
-// "查询设备信息失败,请检查设备是否已离线".show(this)
-// return
-// }
-// titleView.text = "万家乐壁挂炉"
-// Glide.with(this)
-// .load(deviceBean.iconUrl)
-// .placeholder(R.mipmap.load_image_error)
-// .into(deviceLogoView)
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = "万家乐壁挂炉"
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
@@ -73,20 +73,20 @@
override fun onDpUpdate(devId: String?, dpStr: String?) {
Log.d(kTag, "onDpUpdate: $dpStr")
-// val controlMsg = ControlPageFragment.weakReference.obtainMessage()
-// controlMsg.what = 2022092901
-// controlMsg.obj = dpStr
-// ControlPageFragment.weakReference.sendMessage(controlMsg)
-//
-// val statusMsg = StatusPageFragment.weakReference.obtainMessage()
-// statusMsg.what = 2022092902
-// statusMsg.obj = dpStr
-// StatusPageFragment.weakReference.sendMessage(statusMsg)
-//
-// val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
-// deviceBeanMsg.what = 2022092903
-// deviceBeanMsg.obj = deviceBean
-// StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
+ val controlMsg = ControlPageFragment.weakReference.obtainMessage()
+ controlMsg.what = 2022092901
+ controlMsg.obj = dpStr
+ ControlPageFragment.weakReference.sendMessage(controlMsg)
+
+ val statusMsg = StatusPageFragment.weakReference.obtainMessage()
+ statusMsg.what = 2022092902
+ statusMsg.obj = dpStr
+ StatusPageFragment.weakReference.sendMessage(statusMsg)
+
+ val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
+ deviceBeanMsg.what = 2022092903
+ deviceBeanMsg.obj = deviceBean
+ StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
}
})
}
diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
index 79598a9..8428daa 100644
--- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
@@ -65,7 +65,7 @@
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
diff --git a/app/src/main/res/layout/fragment_device_cooker_control.xml b/app/src/main/res/layout/fragment_device_cooker_control.xml
index d8b5de5..e9a4533 100644
--- a/app/src/main/res/layout/fragment_device_cooker_control.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_control.xml
@@ -1,6 +1,7 @@
@@ -22,7 +23,6 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:fontFamily="sans-serif-medium"
android:text="一键关火"
android:textColor="@color/black"
android:textSize="@dimen/sp_14" />
@@ -35,5 +35,288 @@
android:button="@null"
android:gravity="center" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 46ceda0..51ef974 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -115,4 +115,6 @@
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
//图表
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+ //高德地图
+ implementation 'com.amap.api:location:5.3.1'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 907b123..dd3436b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,5 +78,12 @@
android:name="TUYA_SMART_SECRET"
android:value="f3k4ah5qxcfmhm5fhgpvfjje4adgh8at" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 5d4dff1..3d8536d 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -2,14 +2,12 @@
import android.graphics.Color
import android.util.Log
-import com.bumptech.glide.Glide
-import com.bumptech.glide.request.RequestOptions
import com.casic.br.R
import com.casic.br.extensions.compressImage
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.GlideLoadEngine
import com.casic.br.utils.LocaleConstant
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index cc88165..a2fb29a 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,6 +1,5 @@
package com.casic.br.view
-import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -8,19 +7,13 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
-import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
- private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -40,27 +33,7 @@
}
override fun initData() {
- /**
- * TODO 需要改为实际情况
- *
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- SaveKeyValues.putValue(LocaleConstant.HOME_ID, bean?.homeId.toString())
- }
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
index 96510fb..59875ea 100644
--- a/app/src/main/java/com/casic/br/view/RegisterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -2,17 +2,24 @@
import android.content.Context
import android.os.CountDownTimer
+import android.util.Log
+import com.amap.api.location.AMapLocation
import com.casic.br.R
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.LocationHelper
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.isPhoneNumber
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.tuya.smart.android.user.api.IRegisterCallback
import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import com.tuya.smart.sdk.api.IResultCallback
import kotlinx.android.synthetic.main.activity_register.*
import kotlinx.android.synthetic.main.include_left_back_title.*
@@ -95,19 +102,51 @@
}
LoadingDialogHub.show(this, "注册中,请稍后")
- TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
- "86", userPhone, userPassword, smsCode,
- object : IRegisterCallback {
- override fun onSuccess(user: User?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
- override fun onError(code: String?, error: String?) {
- LoadingDialogHub.dismiss()
- "用户注册失败".show(context)
+ LocationHelper.obtainCurrentLocation(this, object : LocationHelper.ILocationListener {
+ override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
+ /**
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ if (aMapLocation == null) {
+ return
}
- })
+ TuyaHomeSdk.getHomeManagerInstance().createHome(
+ "${userPhone}的家", aMapLocation.longitude, aMapLocation.latitude,
+ aMapLocation.address, arrayListOf("1"), object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(
+ LocaleConstant.HOME_ID, bean?.homeId.toString()
+ )
+
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ //TODO 调用自己后台接口
+ Log.d(
+ kTag, "onAMapLocationGet: ${aMapLocation.province}"
+ )
+
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 2d1e332..240636c 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -54,18 +54,18 @@
//控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
-// val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
-// if (deviceBean == null) {
-// "查询设备信息失败,请检查设备是否已离线".show(this)
-// return
-// }
-// titleView.text = "万家乐壁挂炉"
-// Glide.with(this)
-// .load(deviceBean.iconUrl)
-// .placeholder(R.mipmap.load_image_error)
-// .into(deviceLogoView)
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = "万家乐壁挂炉"
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
@@ -73,20 +73,20 @@
override fun onDpUpdate(devId: String?, dpStr: String?) {
Log.d(kTag, "onDpUpdate: $dpStr")
-// val controlMsg = ControlPageFragment.weakReference.obtainMessage()
-// controlMsg.what = 2022092901
-// controlMsg.obj = dpStr
-// ControlPageFragment.weakReference.sendMessage(controlMsg)
-//
-// val statusMsg = StatusPageFragment.weakReference.obtainMessage()
-// statusMsg.what = 2022092902
-// statusMsg.obj = dpStr
-// StatusPageFragment.weakReference.sendMessage(statusMsg)
-//
-// val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
-// deviceBeanMsg.what = 2022092903
-// deviceBeanMsg.obj = deviceBean
-// StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
+ val controlMsg = ControlPageFragment.weakReference.obtainMessage()
+ controlMsg.what = 2022092901
+ controlMsg.obj = dpStr
+ ControlPageFragment.weakReference.sendMessage(controlMsg)
+
+ val statusMsg = StatusPageFragment.weakReference.obtainMessage()
+ statusMsg.what = 2022092902
+ statusMsg.obj = dpStr
+ StatusPageFragment.weakReference.sendMessage(statusMsg)
+
+ val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
+ deviceBeanMsg.what = 2022092903
+ deviceBeanMsg.obj = deviceBean
+ StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
}
})
}
diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
index 79598a9..8428daa 100644
--- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
@@ -65,7 +65,7 @@
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
diff --git a/app/src/main/res/layout/fragment_device_cooker_control.xml b/app/src/main/res/layout/fragment_device_cooker_control.xml
index d8b5de5..e9a4533 100644
--- a/app/src/main/res/layout/fragment_device_cooker_control.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_control.xml
@@ -1,6 +1,7 @@
@@ -22,7 +23,6 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:fontFamily="sans-serif-medium"
android:text="一键关火"
android:textColor="@color/black"
android:textSize="@dimen/sp_14" />
@@ -35,5 +35,288 @@
android:button="@null"
android:gravity="center" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_device_cooker_status.xml b/app/src/main/res/layout/fragment_device_cooker_status.xml
index d289627..92b6b8e 100644
--- a/app/src/main/res/layout/fragment_device_cooker_status.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_status.xml
@@ -111,7 +111,7 @@
android:textSize="@dimen/sp_14" />
-
+ android:orientation="vertical">
-
+
+
+
+
+
+ android:enabled="false"
+ android:thumb="@drawable/select_switch_circle"
+ android:track="@drawable/select_switch_background"
+ tools:ignore="UseSwitchCompatOrMaterialXml" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 5d4dff1..3d8536d 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -2,14 +2,12 @@
import android.graphics.Color
import android.util.Log
-import com.bumptech.glide.Glide
-import com.bumptech.glide.request.RequestOptions
import com.casic.br.R
import com.casic.br.extensions.compressImage
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.GlideLoadEngine
import com.casic.br.utils.LocaleConstant
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index cc88165..a2fb29a 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,6 +1,5 @@
package com.casic.br.view
-import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -8,19 +7,13 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
-import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
- private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -40,27 +33,7 @@
}
override fun initData() {
- /**
- * TODO 需要改为实际情况
- *
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- SaveKeyValues.putValue(LocaleConstant.HOME_ID, bean?.homeId.toString())
- }
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
index 96510fb..59875ea 100644
--- a/app/src/main/java/com/casic/br/view/RegisterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -2,17 +2,24 @@
import android.content.Context
import android.os.CountDownTimer
+import android.util.Log
+import com.amap.api.location.AMapLocation
import com.casic.br.R
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.LocationHelper
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.isPhoneNumber
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.tuya.smart.android.user.api.IRegisterCallback
import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import com.tuya.smart.sdk.api.IResultCallback
import kotlinx.android.synthetic.main.activity_register.*
import kotlinx.android.synthetic.main.include_left_back_title.*
@@ -95,19 +102,51 @@
}
LoadingDialogHub.show(this, "注册中,请稍后")
- TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
- "86", userPhone, userPassword, smsCode,
- object : IRegisterCallback {
- override fun onSuccess(user: User?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
- override fun onError(code: String?, error: String?) {
- LoadingDialogHub.dismiss()
- "用户注册失败".show(context)
+ LocationHelper.obtainCurrentLocation(this, object : LocationHelper.ILocationListener {
+ override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
+ /**
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ if (aMapLocation == null) {
+ return
}
- })
+ TuyaHomeSdk.getHomeManagerInstance().createHome(
+ "${userPhone}的家", aMapLocation.longitude, aMapLocation.latitude,
+ aMapLocation.address, arrayListOf("1"), object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(
+ LocaleConstant.HOME_ID, bean?.homeId.toString()
+ )
+
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ //TODO 调用自己后台接口
+ Log.d(
+ kTag, "onAMapLocationGet: ${aMapLocation.province}"
+ )
+
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 2d1e332..240636c 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -54,18 +54,18 @@
//控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
-// val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
-// if (deviceBean == null) {
-// "查询设备信息失败,请检查设备是否已离线".show(this)
-// return
-// }
-// titleView.text = "万家乐壁挂炉"
-// Glide.with(this)
-// .load(deviceBean.iconUrl)
-// .placeholder(R.mipmap.load_image_error)
-// .into(deviceLogoView)
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = "万家乐壁挂炉"
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
@@ -73,20 +73,20 @@
override fun onDpUpdate(devId: String?, dpStr: String?) {
Log.d(kTag, "onDpUpdate: $dpStr")
-// val controlMsg = ControlPageFragment.weakReference.obtainMessage()
-// controlMsg.what = 2022092901
-// controlMsg.obj = dpStr
-// ControlPageFragment.weakReference.sendMessage(controlMsg)
-//
-// val statusMsg = StatusPageFragment.weakReference.obtainMessage()
-// statusMsg.what = 2022092902
-// statusMsg.obj = dpStr
-// StatusPageFragment.weakReference.sendMessage(statusMsg)
-//
-// val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
-// deviceBeanMsg.what = 2022092903
-// deviceBeanMsg.obj = deviceBean
-// StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
+ val controlMsg = ControlPageFragment.weakReference.obtainMessage()
+ controlMsg.what = 2022092901
+ controlMsg.obj = dpStr
+ ControlPageFragment.weakReference.sendMessage(controlMsg)
+
+ val statusMsg = StatusPageFragment.weakReference.obtainMessage()
+ statusMsg.what = 2022092902
+ statusMsg.obj = dpStr
+ StatusPageFragment.weakReference.sendMessage(statusMsg)
+
+ val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
+ deviceBeanMsg.what = 2022092903
+ deviceBeanMsg.obj = deviceBean
+ StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
}
})
}
diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
index 79598a9..8428daa 100644
--- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
@@ -65,7 +65,7 @@
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
diff --git a/app/src/main/res/layout/fragment_device_cooker_control.xml b/app/src/main/res/layout/fragment_device_cooker_control.xml
index d8b5de5..e9a4533 100644
--- a/app/src/main/res/layout/fragment_device_cooker_control.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_control.xml
@@ -1,6 +1,7 @@
@@ -22,7 +23,6 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:fontFamily="sans-serif-medium"
android:text="一键关火"
android:textColor="@color/black"
android:textSize="@dimen/sp_14" />
@@ -35,5 +35,288 @@
android:button="@null"
android:gravity="center" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_device_cooker_status.xml b/app/src/main/res/layout/fragment_device_cooker_status.xml
index d289627..92b6b8e 100644
--- a/app/src/main/res/layout/fragment_device_cooker_status.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_status.xml
@@ -111,7 +111,7 @@
android:textSize="@dimen/sp_14" />
-
+ android:orientation="vertical">
-
+
+
+
+
+
+ android:enabled="false"
+ android:thumb="@drawable/select_switch_circle"
+ android:track="@drawable/select_switch_background"
+ tools:ignore="UseSwitchCompatOrMaterialXml" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
index c374978..766c0d7 100644
--- a/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
+++ b/app/src/main/java/com/casic/br/callback/OnImageCompressListener.kt
@@ -1,4 +1,4 @@
-package com.casic.smarttube.callback
+package com.casic.br.callback
import java.io.File
diff --git a/app/src/main/java/com/casic/br/extensions/String.kt b/app/src/main/java/com/casic/br/extensions/String.kt
index bd2b798..cda5da7 100644
--- a/app/src/main/java/com/casic/br/extensions/String.kt
+++ b/app/src/main/java/com/casic/br/extensions/String.kt
@@ -2,14 +2,13 @@
import android.content.Context
import android.util.Log
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.createCompressImageDir
import com.pengxh.kt.lite.extensions.toJson
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.text.ParseException
-import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.abs
diff --git a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
index ec7a9cd..db3ffae 100644
--- a/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/DevicePageFragment.kt
@@ -106,17 +106,6 @@
deviceModels.add(model)
}
- //TODO 测试
-// val model = AddedDeviceModel()
-// model.deviceId = ""
-// model.deviceName = "万家乐热水器"
-// model.isOnline = false
-// model.deviceImage = ""
-// model.deviceModel = ""
-// model.deviceType = ""
-// model.deviceUsedTime = "已使用0天"
-// deviceModels.add(model)
-
when {
isRefresh -> {
dataBeans.clear()
@@ -160,10 +149,10 @@
requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo()
+ requireContext().navigatePageTo(deviceModel.deviceId)
}
}
}
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
index ba4f9e6..aba0152 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/ControlPageFragment.kt
@@ -1,18 +1,32 @@
package com.casic.br.fragment.cooker
+import android.os.Handler
+import com.alibaba.fastjson.JSONObject
import com.casic.br.R
+import com.casic.br.extensions.createCommand
+import com.casic.br.utils.CommandManager
+import com.casic.br.utils.SliderCallback
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.qmuiteam.qmui.widget.QMUISlider
import com.tuya.smart.sdk.api.ITuyaDevice
+import kotlinx.android.synthetic.main.fragment_device_cooker_control.*
+import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
}
private val kTag = "ControlPageFragment"
+ private var isDeviceWorking = false
+ private val minTime = 0
+ private var maxTime = 180
+ private var leftCookerCurrentProgress = 0
+ private var rightCookerCurrentProgress = 0
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_control
@@ -25,10 +39,107 @@
}
override fun initData() {
+ weakReference = WeakReferenceHandler(callback)
+ //左
+ leftCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ leftCookerTimeSlider.currentProgress = leftCookerCurrentProgress
+ leftCookerTimeView.text = String.format("${minTime + leftCookerCurrentProgress}")
+ leftCookerMinTimeView.text = minTime.toString()
+ leftCookerMaxTimeView.text = maxTime.toString()
+
+ //右
+ rightCookerTimeSlider.tickCount = abs(maxTime - minTime)
+ rightCookerTimeSlider.currentProgress = rightCookerCurrentProgress
+ rightCookerTimeView.text = String.format("${minTime + rightCookerCurrentProgress}")
+ rightCookerMinTimeView.text = minTime.toString()
+ rightCookerMaxTimeView.text = maxTime.toString()
+ }
+
+ private val callback = Handler.Callback { message ->
+ when (message.what) {
+ 2022092901 -> {
+ val parseObject = JSONObject.parseObject(message.obj as String)
+ parseObject.keys.forEach {
+ when (it) {
+ "104" -> {
+ isDeviceWorking = parseObject[it] as Boolean
+ turnOffRadioButton.isChecked = isDeviceWorking
+ }
+ "3" -> {
+
+ }
+ "4" -> {
+
+ }
+ "5" -> leftDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "6" -> rightDelayTimeView.text =
+ String.format("${parseObject[it] as String}min")
+ "102" -> leftSwitch.isChecked = parseObject[it] as Boolean
+ "103" -> rightSwitch.isChecked = parseObject[it] as Boolean
+ }
+ }
+ }
+ }
+ true
}
override fun initEvent() {
+ turnOffRadioButton.setOnClickListener {
+ if (isDeviceWorking) {
+ CommandManager.sendTuyaDp(deviceInstance, "104".createCommand(true))
+ } else {
+ "燃气灶无法一键开火,请手动打开燃气灶".show(requireContext())
+ }
+ }
+ leftCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ leftCookerCurrentProgress = progress
+ leftCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "3".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ rightCookerTimeSlider.setCallback(object : SliderCallback() {
+ override fun onProgressChange(
+ slider: QMUISlider?, progress: Int, tickCount: Int, fromUser: Boolean
+ ) {
+ rightCookerCurrentProgress = progress
+ rightCookerTimeView.text = String.format("${minTime + progress}")
+ }
+
+ override fun onStopMoving(slider: QMUISlider?, progress: Int, tickCount: Int) {
+ CommandManager.sendTuyaDp(
+ deviceInstance, "4".createCommand(minTime + progress)
+ )
+ }
+ })
+
+ leftSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (leftCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "102".createCommand(isChecked))
+ }
+
+ rightSwitch.setOnCheckedChangeListener { view, isChecked ->
+ if (rightCookerCurrentProgress == 0) {
+ view.isChecked = false
+ "未设置定时,无法打开此开关".show(requireContext())
+ return@setOnCheckedChangeListener
+ }
+ CommandManager.sendTuyaDp(deviceInstance, "103".createCommand(isChecked))
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
index 4689a8a..55600ee 100644
--- a/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/cooker/StatusPageFragment.kt
@@ -21,7 +21,6 @@
private val kTag = "StatusPageFragment"
private val wifi by lazy { requireContext().applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
- private var isDeviceWorking = false
override fun initLayoutView(): Int = R.layout.fragment_device_cooker_status
@@ -39,12 +38,33 @@
private val callback = Handler.Callback { message ->
when (message.what) {
- 2022092802 -> {
+ 2022092902 -> {
val parseObject = JSONObject.parseObject(message.obj as String)
parseObject.keys.forEach {
when (it) {
- "1" -> {//开关机
- isDeviceWorking = parseObject[it] as Boolean
+ "1" -> {//soft, low, medium, high
+ leftCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "2" -> {//soft, low, medium, high
+ rightCookerStateView.text = when (parseObject[it] as String) {
+ "soft" -> "保温"
+ "low" -> "小火"
+ "medium" -> "中火"
+ "high" -> "猛火"
+ else -> "已关火"
+ }
+ }
+ "11" -> {
+ workingTimeView.text = String.format("${parseObject[it] as Int}min")
+ }
+ "101" -> {
+ yzStatusSwitch.isChecked = parseObject[it] as Boolean
}
}
}
@@ -71,11 +91,6 @@
} else {
wifiLayout.visibility = View.GONE
}
-// deviceStateView.text = if (!isDeviceWorking) {
-// "已关机"
-// } else {
-// "工作中"
-// }
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
index c472dc9..e64134e 100644
--- a/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
+++ b/app/src/main/java/com/casic/br/fragment/fireplace/ControlPageFragment.kt
@@ -13,8 +13,7 @@
import kotlinx.android.synthetic.main.fragment_device_fireplace_control.*
import kotlin.math.abs
-class ControlPageFragment(private val deviceInstance: ITuyaDevice, private val deviceId: String) :
- KotlinBaseFragment() {
+class ControlPageFragment(private val deviceInstance: ITuyaDevice) : KotlinBaseFragment() {
companion object {
lateinit var weakReference: WeakReferenceHandler
diff --git a/app/src/main/java/com/casic/br/utils/LocationHelper.kt b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
new file mode 100644
index 0000000..c28d58a
--- /dev/null
+++ b/app/src/main/java/com/casic/br/utils/LocationHelper.kt
@@ -0,0 +1,35 @@
+package com.casic.br.utils
+
+import android.content.Context
+import android.util.Log
+import com.amap.api.location.AMapLocation
+import com.amap.api.location.AMapLocationClient
+import com.amap.api.location.AMapLocationClientOption
+
+object LocationHelper {
+ private const val kTag = "LocationHelper"
+
+ fun obtainCurrentLocation(context: Context, listener: ILocationListener) {
+ val locationClient = AMapLocationClient(context)
+ val locationOption = AMapLocationClientOption()
+ //设置定位模式为高精度模式,AMapLocationMode.Battery_Saving为低功耗模式,AMapLocationMode.Device_Sensors是仅设备模式
+ locationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
+ locationClient.setLocationOption(locationOption)
+ locationClient.setLocationListener {
+ if (it.errorCode == 0) {
+ listener.onAMapLocationGet(it)
+ } else {
+ listener.onAMapLocationGet(null)
+ //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+ Log.e(
+ kTag, "location Error, ErrCode: ${it.errorCode} , errInfo: ${it.errorInfo}"
+ )
+ }
+ }
+ locationClient.startLocation()
+ }
+
+ interface ILocationListener {
+ fun onAMapLocationGet(aMapLocation: AMapLocation?) //高德定位数据
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 5d4dff1..3d8536d 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -2,14 +2,12 @@
import android.graphics.Color
import android.util.Log
-import com.bumptech.glide.Glide
-import com.bumptech.glide.request.RequestOptions
import com.casic.br.R
import com.casic.br.extensions.compressImage
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.GlideLoadEngine
import com.casic.br.utils.LocaleConstant
-import com.casic.smarttube.callback.OnImageCompressListener
+import com.casic.br.callback.OnImageCompressListener
import com.gyf.immersionbar.ImmersionBar
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.SelectMimeType
diff --git a/app/src/main/java/com/casic/br/view/MainActivity.kt b/app/src/main/java/com/casic/br/view/MainActivity.kt
index cc88165..a2fb29a 100644
--- a/app/src/main/java/com/casic/br/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/br/view/MainActivity.kt
@@ -1,6 +1,5 @@
package com.casic.br.view
-import android.util.Log
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
@@ -8,19 +7,13 @@
import com.casic.br.R
import com.casic.br.adapter.ViewPagerAdapter
import com.casic.br.fragment.*
-import com.casic.br.utils.LocaleConstant
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.bean.HomeBean
-import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
- private val kTag = "MainActivity"
private var menuItem: MenuItem? = null
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
@@ -40,27 +33,7 @@
}
override fun initData() {
- /**
- * TODO 需要改为实际情况
- *
- * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
- * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
- * 用户账号下创建任意多个家庭。
- * */
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- if (homeId == "") {
- TuyaHomeSdk.getHomeManagerInstance()
- .createHome("北燃生活体验馆", 116.486394, 39.885734, "西直门内南小街", arrayListOf("1"), object :
- ITuyaHomeResultCallback {
- override fun onSuccess(bean: HomeBean?) {
- SaveKeyValues.putValue(LocaleConstant.HOME_ID, bean?.homeId.toString())
- }
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
- }
- })
- }
}
override fun observeRequestState() {
diff --git a/app/src/main/java/com/casic/br/view/RegisterActivity.kt b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
index 96510fb..59875ea 100644
--- a/app/src/main/java/com/casic/br/view/RegisterActivity.kt
+++ b/app/src/main/java/com/casic/br/view/RegisterActivity.kt
@@ -2,17 +2,24 @@
import android.content.Context
import android.os.CountDownTimer
+import android.util.Log
+import com.amap.api.location.AMapLocation
import com.casic.br.R
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.utils.LocationHelper
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.isPhoneNumber
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import com.tuya.smart.android.user.api.IRegisterCallback
import com.tuya.smart.android.user.bean.User
import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.HomeBean
+import com.tuya.smart.home.sdk.callback.ITuyaHomeResultCallback
import com.tuya.smart.sdk.api.IResultCallback
import kotlinx.android.synthetic.main.activity_register.*
import kotlinx.android.synthetic.main.include_left_back_title.*
@@ -95,19 +102,51 @@
}
LoadingDialogHub.show(this, "注册中,请稍后")
- TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
- "86", userPhone, userPassword, smsCode,
- object : IRegisterCallback {
- override fun onSuccess(user: User?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
- override fun onError(code: String?, error: String?) {
- LoadingDialogHub.dismiss()
- "用户注册失败".show(context)
+ LocationHelper.obtainCurrentLocation(this, object : LocationHelper.ILocationListener {
+ override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
+ /**
+ * 家庭是智能生活 App SDK 开发下实际场景的最大单位。
+ * IoT 设备的添加、编辑、移除、状态变化的监听基于家庭下。
+ * 用户账号下创建任意多个家庭。
+ * */
+ if (aMapLocation == null) {
+ return
}
- })
+ TuyaHomeSdk.getHomeManagerInstance().createHome(
+ "${userPhone}的家", aMapLocation.longitude, aMapLocation.latitude,
+ aMapLocation.address, arrayListOf("1"), object : ITuyaHomeResultCallback {
+ override fun onSuccess(bean: HomeBean?) {
+ SaveKeyValues.putValue(
+ LocaleConstant.HOME_ID, bean?.homeId.toString()
+ )
+
+ TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
+ "86", userPhone, userPassword, smsCode,
+ object : IRegisterCallback {
+ override fun onSuccess(user: User?) {
+ //TODO 调用自己后台接口
+ Log.d(
+ kTag, "onAMapLocationGet: ${aMapLocation.province}"
+ )
+
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+
+ override fun onError(code: String?, error: String?) {
+ LoadingDialogHub.dismiss()
+ "用户注册失败".show(context)
+ }
+ })
+ }
+
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.e(kTag, "errorCode: $errorCode ---- $errorMsg")
+ }
+ })
+ }
+ })
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
index 2d1e332..240636c 100644
--- a/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/CookerActivity.kt
@@ -54,18 +54,18 @@
//控制设备前必须初始家庭化数据,每次 App 活跃期间,初始化一次即可。
deviceInstance = TuyaHomeSdk.newDeviceInstance(deviceId)
-// val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
-// if (deviceBean == null) {
-// "查询设备信息失败,请检查设备是否已离线".show(this)
-// return
-// }
-// titleView.text = "万家乐壁挂炉"
-// Glide.with(this)
-// .load(deviceBean.iconUrl)
-// .placeholder(R.mipmap.load_image_error)
-// .into(deviceLogoView)
+ val deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId)
+ if (deviceBean == null) {
+ "查询设备信息失败,请检查设备是否已离线".show(this)
+ return
+ }
+ titleView.text = "万家乐壁挂炉"
+ Glide.with(this)
+ .load(deviceBean.iconUrl)
+ .placeholder(R.mipmap.load_image_error)
+ .into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
@@ -73,20 +73,20 @@
override fun onDpUpdate(devId: String?, dpStr: String?) {
Log.d(kTag, "onDpUpdate: $dpStr")
-// val controlMsg = ControlPageFragment.weakReference.obtainMessage()
-// controlMsg.what = 2022092901
-// controlMsg.obj = dpStr
-// ControlPageFragment.weakReference.sendMessage(controlMsg)
-//
-// val statusMsg = StatusPageFragment.weakReference.obtainMessage()
-// statusMsg.what = 2022092902
-// statusMsg.obj = dpStr
-// StatusPageFragment.weakReference.sendMessage(statusMsg)
-//
-// val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
-// deviceBeanMsg.what = 2022092903
-// deviceBeanMsg.obj = deviceBean
-// StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
+ val controlMsg = ControlPageFragment.weakReference.obtainMessage()
+ controlMsg.what = 2022092901
+ controlMsg.obj = dpStr
+ ControlPageFragment.weakReference.sendMessage(controlMsg)
+
+ val statusMsg = StatusPageFragment.weakReference.obtainMessage()
+ statusMsg.what = 2022092902
+ statusMsg.obj = dpStr
+ StatusPageFragment.weakReference.sendMessage(statusMsg)
+
+ val deviceBeanMsg = StatusPageFragment.weakReference.obtainMessage()
+ deviceBeanMsg.what = 2022092903
+ deviceBeanMsg.obj = deviceBean
+ StatusPageFragment.weakReference.sendMessage(deviceBeanMsg)
}
})
}
diff --git a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
index 79598a9..8428daa 100644
--- a/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/device/FireplaceActivity.kt
@@ -65,7 +65,7 @@
.placeholder(R.mipmap.load_image_error)
.into(deviceLogoView)
- fragmentPages.add(ControlPageFragment(deviceInstance, deviceId))
+ fragmentPages.add(ControlPageFragment(deviceInstance))
fragmentPages.add(StatusPageFragment(deviceInstance))
fragmentPages.add(ServicePageFragment())
diff --git a/app/src/main/res/layout/fragment_device_cooker_control.xml b/app/src/main/res/layout/fragment_device_cooker_control.xml
index d8b5de5..e9a4533 100644
--- a/app/src/main/res/layout/fragment_device_cooker_control.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_control.xml
@@ -1,6 +1,7 @@
@@ -22,7 +23,6 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:fontFamily="sans-serif-medium"
android:text="一键关火"
android:textColor="@color/black"
android:textSize="@dimen/sp_14" />
@@ -35,5 +35,288 @@
android:button="@null"
android:gravity="center" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_device_cooker_status.xml b/app/src/main/res/layout/fragment_device_cooker_status.xml
index d289627..92b6b8e 100644
--- a/app/src/main/res/layout/fragment_device_cooker_status.xml
+++ b/app/src/main/res/layout/fragment_device_cooker_status.xml
@@ -111,7 +111,7 @@
android:textSize="@dimen/sp_14" />
-
+ android:orientation="vertical">
-
+
+
+
+
+
+ android:enabled="false"
+ android:thumb="@drawable/select_switch_circle"
+ android:track="@drawable/select_switch_background"
+ tools:ignore="UseSwitchCompatOrMaterialXml" />