diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ecbed59..d60335b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ecbed59..d60335b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
index 16b4e19..510bca0 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
@@ -101,4 +101,13 @@
@Multipart
@POST("/file/uploadFile")
suspend fun uploadImage(@Part file: MultipartBody.Part): String
+
+ /**
+ * Banner
+ */
+ @POST("/deviceInfo/add")
+ suspend fun addDevice(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ecbed59..d60335b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
index 16b4e19..510bca0 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
@@ -101,4 +101,13 @@
@Multipart
@POST("/file/uploadFile")
suspend fun uploadImage(@Part file: MultipartBody.Part): String
+
+ /**
+ * Banner
+ */
+ @POST("/deviceInfo/add")
+ suspend fun addDevice(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
index a31d9c3..7dff2a3 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
@@ -3,8 +3,10 @@
import com.casic.br.model.UserDetailModel
import com.casic.br.utils.AuthenticationHelper
import com.casic.br.utils.LocaleConstant
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
import com.pengxh.kt.lite.utils.RetrofitFactory.createRetrofit
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.sdk.bean.DeviceBean
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
@@ -207,4 +209,44 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(imagePart)
}
+
+ /**
+ * 添加设备到自己服务器
+ */
+ suspend fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel): String {
+ val paramObject = JSONObject()
+ paramObject.put("snCode", "")
+ paramObject.put("deviceId", devResp.devId)
+ paramObject.put("brandCode", "")
+ paramObject.put("brandName", "")
+ paramObject.put("productCode", devResp.productId)
+ paramObject.put("productName", "")
+ paramObject.put("produceDate", "")
+ paramObject.put("deviceStatus", 1)
+ paramObject.put("deviceActive", 1)
+ paramObject.put("deviceActiveTime", devResp.time)
+ paramObject.put("deviceBindUser", 1)
+ paramObject.put("deviceName", devResp.name)
+ paramObject.put("deviceHardwareVersion", devResp.bv)
+ paramObject.put("deviceSoftwareVersion", devResp.pv)
+ paramObject.put("deviceCoreParts", "")
+ paramObject.put("deviceMac", devResp.mac)
+ paramObject.put("deviceIp", devResp.ip)
+ paramObject.put("productCategory", devResp.category)
+ paramObject.put("internationalCode", "")
+ paramObject.put("productSize", "")
+ paramObject.put("productWeight", "")
+ paramObject.put("productStatus", "")
+ paramObject.put("productVersion", devResp.productBean.productVer)
+ paramObject.put("productQuality", "")
+ paramObject.put("productColor", devResp.productBean)
+ paramObject.put("userAccount", userModel.account)
+ paramObject.put("userName", userModel.name)
+ paramObject.put("userPhone", userModel.phone)
+ paramObject.put("userBindDate", System.currentTimeMillis().timestampToCompleteDate())
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addDevice(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ecbed59..d60335b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
index 16b4e19..510bca0 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
@@ -101,4 +101,13 @@
@Multipart
@POST("/file/uploadFile")
suspend fun uploadImage(@Part file: MultipartBody.Part): String
+
+ /**
+ * Banner
+ */
+ @POST("/deviceInfo/add")
+ suspend fun addDevice(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
index a31d9c3..7dff2a3 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
@@ -3,8 +3,10 @@
import com.casic.br.model.UserDetailModel
import com.casic.br.utils.AuthenticationHelper
import com.casic.br.utils.LocaleConstant
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
import com.pengxh.kt.lite.utils.RetrofitFactory.createRetrofit
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.sdk.bean.DeviceBean
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
@@ -207,4 +209,44 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(imagePart)
}
+
+ /**
+ * 添加设备到自己服务器
+ */
+ suspend fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel): String {
+ val paramObject = JSONObject()
+ paramObject.put("snCode", "")
+ paramObject.put("deviceId", devResp.devId)
+ paramObject.put("brandCode", "")
+ paramObject.put("brandName", "")
+ paramObject.put("productCode", devResp.productId)
+ paramObject.put("productName", "")
+ paramObject.put("produceDate", "")
+ paramObject.put("deviceStatus", 1)
+ paramObject.put("deviceActive", 1)
+ paramObject.put("deviceActiveTime", devResp.time)
+ paramObject.put("deviceBindUser", 1)
+ paramObject.put("deviceName", devResp.name)
+ paramObject.put("deviceHardwareVersion", devResp.bv)
+ paramObject.put("deviceSoftwareVersion", devResp.pv)
+ paramObject.put("deviceCoreParts", "")
+ paramObject.put("deviceMac", devResp.mac)
+ paramObject.put("deviceIp", devResp.ip)
+ paramObject.put("productCategory", devResp.category)
+ paramObject.put("internationalCode", "")
+ paramObject.put("productSize", "")
+ paramObject.put("productWeight", "")
+ paramObject.put("productStatus", "")
+ paramObject.put("productVersion", devResp.productBean.productVer)
+ paramObject.put("productQuality", "")
+ paramObject.put("productColor", devResp.productBean)
+ paramObject.put("userAccount", userModel.account)
+ paramObject.put("userName", userModel.name)
+ paramObject.put("userPhone", userModel.phone)
+ paramObject.put("userBindDate", System.currentTimeMillis().timestampToCompleteDate())
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addDevice(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
new file mode 100644
index 0000000..c3b861d
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -0,0 +1,111 @@
+package com.casic.br.view
+
+import android.util.Log
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.DeserializeModel
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.vm.DeviceViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.builder.ActivatorBuilder
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.enums.ActivatorModelEnum
+import kotlinx.android.synthetic.main.activity_connect_device.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class ConnectDeviceActivity : KotlinBaseActivity() {
+
+ private val kTag = "ResetDeviceActivity"
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_connect_device
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ }
+
+ override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ if (!confirmCheckBox.isChecked) {
+ "请确认设备指示灯是否闪烁".show(this)
+ return@setOnClickListener
+ }
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val userModel = DeserializeModel.getUserModel()!!
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String) {
+ //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
+ val builder = ActivatorBuilder().apply {
+ this.ssid = params[0]
+ this.context = this@ConnectDeviceActivity
+ this.password = params[1]
+ this.activatorModel = ActivatorModelEnum.TY_EZ
+ this.timeOut = 100
+ this.token = token
+ this.listener = object : ITuyaSmartActivatorListener {
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.d(kTag, "errorMsg: $errorMsg")
+ "添加设备超时".show(this@ConnectDeviceActivity)
+ LoadingDialogHub.dismiss()
+ }
+
+ override fun onActiveSuccess(devResp: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(devResp!!,userModel)
+ }
+
+ override fun onStep(step: String?, data: Any?) {
+ LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
+ }
+
+ override fun onFailure(s: String, s1: String) {
+ Log.e(kTag, "onFailure: $s")
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重置设备重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ecbed59..d60335b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
index 16b4e19..510bca0 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
@@ -101,4 +101,13 @@
@Multipart
@POST("/file/uploadFile")
suspend fun uploadImage(@Part file: MultipartBody.Part): String
+
+ /**
+ * Banner
+ */
+ @POST("/deviceInfo/add")
+ suspend fun addDevice(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
index a31d9c3..7dff2a3 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
@@ -3,8 +3,10 @@
import com.casic.br.model.UserDetailModel
import com.casic.br.utils.AuthenticationHelper
import com.casic.br.utils.LocaleConstant
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
import com.pengxh.kt.lite.utils.RetrofitFactory.createRetrofit
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.sdk.bean.DeviceBean
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
@@ -207,4 +209,44 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(imagePart)
}
+
+ /**
+ * 添加设备到自己服务器
+ */
+ suspend fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel): String {
+ val paramObject = JSONObject()
+ paramObject.put("snCode", "")
+ paramObject.put("deviceId", devResp.devId)
+ paramObject.put("brandCode", "")
+ paramObject.put("brandName", "")
+ paramObject.put("productCode", devResp.productId)
+ paramObject.put("productName", "")
+ paramObject.put("produceDate", "")
+ paramObject.put("deviceStatus", 1)
+ paramObject.put("deviceActive", 1)
+ paramObject.put("deviceActiveTime", devResp.time)
+ paramObject.put("deviceBindUser", 1)
+ paramObject.put("deviceName", devResp.name)
+ paramObject.put("deviceHardwareVersion", devResp.bv)
+ paramObject.put("deviceSoftwareVersion", devResp.pv)
+ paramObject.put("deviceCoreParts", "")
+ paramObject.put("deviceMac", devResp.mac)
+ paramObject.put("deviceIp", devResp.ip)
+ paramObject.put("productCategory", devResp.category)
+ paramObject.put("internationalCode", "")
+ paramObject.put("productSize", "")
+ paramObject.put("productWeight", "")
+ paramObject.put("productStatus", "")
+ paramObject.put("productVersion", devResp.productBean.productVer)
+ paramObject.put("productQuality", "")
+ paramObject.put("productColor", devResp.productBean)
+ paramObject.put("userAccount", userModel.account)
+ paramObject.put("userName", userModel.name)
+ paramObject.put("userPhone", userModel.phone)
+ paramObject.put("userBindDate", System.currentTimeMillis().timestampToCompleteDate())
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addDevice(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
new file mode 100644
index 0000000..c3b861d
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -0,0 +1,111 @@
+package com.casic.br.view
+
+import android.util.Log
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.DeserializeModel
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.vm.DeviceViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.builder.ActivatorBuilder
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.enums.ActivatorModelEnum
+import kotlinx.android.synthetic.main.activity_connect_device.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class ConnectDeviceActivity : KotlinBaseActivity() {
+
+ private val kTag = "ResetDeviceActivity"
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_connect_device
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ }
+
+ override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ if (!confirmCheckBox.isChecked) {
+ "请确认设备指示灯是否闪烁".show(this)
+ return@setOnClickListener
+ }
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val userModel = DeserializeModel.getUserModel()!!
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String) {
+ //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
+ val builder = ActivatorBuilder().apply {
+ this.ssid = params[0]
+ this.context = this@ConnectDeviceActivity
+ this.password = params[1]
+ this.activatorModel = ActivatorModelEnum.TY_EZ
+ this.timeOut = 100
+ this.token = token
+ this.listener = object : ITuyaSmartActivatorListener {
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.d(kTag, "errorMsg: $errorMsg")
+ "添加设备超时".show(this@ConnectDeviceActivity)
+ LoadingDialogHub.dismiss()
+ }
+
+ override fun onActiveSuccess(devResp: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(devResp!!,userModel)
+ }
+
+ override fun onStep(step: String?, data: Any?) {
+ LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
+ }
+
+ override fun onFailure(s: String, s1: String) {
+ Log.e(kTag, "onFailure: $s")
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重置设备重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
deleted file mode 100644
index 11c40dc..0000000
--- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.casic.br.view
-
-import android.util.Log
-import android.view.View
-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.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.builder.ActivatorBuilder
-import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
-import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
-import com.tuya.smart.sdk.bean.DeviceBean
-import com.tuya.smart.sdk.enums.ActivatorModelEnum
-import kotlinx.android.synthetic.main.activity_reset_device.*
-import kotlinx.android.synthetic.main.include_left_back_title.*
-import java.util.*
-
-class ResetDeviceActivity : KotlinBaseActivity() {
-
- private val kTag = "ResetDeviceActivity"
- private lateinit var params: ArrayList
-
- override fun initLayoutView(): Int = R.layout.activity_reset_device
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- titleView.visibility = View.GONE
- }
-
- override fun initData() {
- params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- }
-
- override fun initEvent() {
- nextStepButton.setOnClickListener {
- if (!confirmCheckBox.isChecked) {
- "请确认设备指示灯是否闪烁".show(this)
- return@setOnClickListener
- }
- LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
- object : ITuyaActivatorGetToken {
- override fun onSuccess(token: String) {
- Log.d(kTag, "token: $token")
- //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
- val builder = ActivatorBuilder().apply {
- this.ssid = params[0]
- this.context = this@ResetDeviceActivity
- this.password = params[1]
- this.activatorModel = ActivatorModelEnum.TY_EZ
- this.timeOut = 100
- this.token = token
- this.listener = object : ITuyaSmartActivatorListener {
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.d(kTag, "errorMsg: $errorMsg")
- "添加设备超时".show(this@ResetDeviceActivity)
- LoadingDialogHub.dismiss()
- }
-
- override fun onActiveSuccess(devResp: DeviceBean?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
-
- override fun onStep(step: String?, data: Any?) {
- Log.d(kTag, "onStep: $step")
- LoadingDialogHub.dismiss()
- }
- }
- }
- TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
- }
-
- override fun onFailure(s: String, s1: String) {
- Log.e(kTag, "onFailure: $s")
- LoadingDialogHub.dismiss()
- }
- })
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ecbed59..d60335b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
index 16b4e19..510bca0 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
@@ -101,4 +101,13 @@
@Multipart
@POST("/file/uploadFile")
suspend fun uploadImage(@Part file: MultipartBody.Part): String
+
+ /**
+ * Banner
+ */
+ @POST("/deviceInfo/add")
+ suspend fun addDevice(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
index a31d9c3..7dff2a3 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
@@ -3,8 +3,10 @@
import com.casic.br.model.UserDetailModel
import com.casic.br.utils.AuthenticationHelper
import com.casic.br.utils.LocaleConstant
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
import com.pengxh.kt.lite.utils.RetrofitFactory.createRetrofit
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.sdk.bean.DeviceBean
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
@@ -207,4 +209,44 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(imagePart)
}
+
+ /**
+ * 添加设备到自己服务器
+ */
+ suspend fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel): String {
+ val paramObject = JSONObject()
+ paramObject.put("snCode", "")
+ paramObject.put("deviceId", devResp.devId)
+ paramObject.put("brandCode", "")
+ paramObject.put("brandName", "")
+ paramObject.put("productCode", devResp.productId)
+ paramObject.put("productName", "")
+ paramObject.put("produceDate", "")
+ paramObject.put("deviceStatus", 1)
+ paramObject.put("deviceActive", 1)
+ paramObject.put("deviceActiveTime", devResp.time)
+ paramObject.put("deviceBindUser", 1)
+ paramObject.put("deviceName", devResp.name)
+ paramObject.put("deviceHardwareVersion", devResp.bv)
+ paramObject.put("deviceSoftwareVersion", devResp.pv)
+ paramObject.put("deviceCoreParts", "")
+ paramObject.put("deviceMac", devResp.mac)
+ paramObject.put("deviceIp", devResp.ip)
+ paramObject.put("productCategory", devResp.category)
+ paramObject.put("internationalCode", "")
+ paramObject.put("productSize", "")
+ paramObject.put("productWeight", "")
+ paramObject.put("productStatus", "")
+ paramObject.put("productVersion", devResp.productBean.productVer)
+ paramObject.put("productQuality", "")
+ paramObject.put("productColor", devResp.productBean)
+ paramObject.put("userAccount", userModel.account)
+ paramObject.put("userName", userModel.name)
+ paramObject.put("userPhone", userModel.phone)
+ paramObject.put("userBindDate", System.currentTimeMillis().timestampToCompleteDate())
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addDevice(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
new file mode 100644
index 0000000..c3b861d
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -0,0 +1,111 @@
+package com.casic.br.view
+
+import android.util.Log
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.DeserializeModel
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.vm.DeviceViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.builder.ActivatorBuilder
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.enums.ActivatorModelEnum
+import kotlinx.android.synthetic.main.activity_connect_device.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class ConnectDeviceActivity : KotlinBaseActivity() {
+
+ private val kTag = "ResetDeviceActivity"
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_connect_device
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ }
+
+ override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ if (!confirmCheckBox.isChecked) {
+ "请确认设备指示灯是否闪烁".show(this)
+ return@setOnClickListener
+ }
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val userModel = DeserializeModel.getUserModel()!!
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String) {
+ //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
+ val builder = ActivatorBuilder().apply {
+ this.ssid = params[0]
+ this.context = this@ConnectDeviceActivity
+ this.password = params[1]
+ this.activatorModel = ActivatorModelEnum.TY_EZ
+ this.timeOut = 100
+ this.token = token
+ this.listener = object : ITuyaSmartActivatorListener {
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.d(kTag, "errorMsg: $errorMsg")
+ "添加设备超时".show(this@ConnectDeviceActivity)
+ LoadingDialogHub.dismiss()
+ }
+
+ override fun onActiveSuccess(devResp: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(devResp!!,userModel)
+ }
+
+ override fun onStep(step: String?, data: Any?) {
+ LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
+ }
+
+ override fun onFailure(s: String, s1: String) {
+ Log.e(kTag, "onFailure: $s")
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重置设备重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
deleted file mode 100644
index 11c40dc..0000000
--- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.casic.br.view
-
-import android.util.Log
-import android.view.View
-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.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.builder.ActivatorBuilder
-import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
-import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
-import com.tuya.smart.sdk.bean.DeviceBean
-import com.tuya.smart.sdk.enums.ActivatorModelEnum
-import kotlinx.android.synthetic.main.activity_reset_device.*
-import kotlinx.android.synthetic.main.include_left_back_title.*
-import java.util.*
-
-class ResetDeviceActivity : KotlinBaseActivity() {
-
- private val kTag = "ResetDeviceActivity"
- private lateinit var params: ArrayList
-
- override fun initLayoutView(): Int = R.layout.activity_reset_device
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- titleView.visibility = View.GONE
- }
-
- override fun initData() {
- params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- }
-
- override fun initEvent() {
- nextStepButton.setOnClickListener {
- if (!confirmCheckBox.isChecked) {
- "请确认设备指示灯是否闪烁".show(this)
- return@setOnClickListener
- }
- LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
- object : ITuyaActivatorGetToken {
- override fun onSuccess(token: String) {
- Log.d(kTag, "token: $token")
- //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
- val builder = ActivatorBuilder().apply {
- this.ssid = params[0]
- this.context = this@ResetDeviceActivity
- this.password = params[1]
- this.activatorModel = ActivatorModelEnum.TY_EZ
- this.timeOut = 100
- this.token = token
- this.listener = object : ITuyaSmartActivatorListener {
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.d(kTag, "errorMsg: $errorMsg")
- "添加设备超时".show(this@ResetDeviceActivity)
- LoadingDialogHub.dismiss()
- }
-
- override fun onActiveSuccess(devResp: DeviceBean?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
-
- override fun onStep(step: String?, data: Any?) {
- Log.d(kTag, "onStep: $step")
- LoadingDialogHub.dismiss()
- }
- }
- }
- TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
- }
-
- override fun onFailure(s: String, s1: String) {
- Log.e(kTag, "onFailure: $s")
- LoadingDialogHub.dismiss()
- }
- })
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
index a432adc..c81015b 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -58,7 +58,7 @@
"请输入WiFi密码".show(this)
return@setOnClickListener
}
- navigatePageTo(arrayListOf(wifiName, wifiKey))
+ navigatePageTo(arrayListOf(wifiName, wifiKey))
}
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ecbed59..d60335b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
index 16b4e19..510bca0 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
@@ -101,4 +101,13 @@
@Multipart
@POST("/file/uploadFile")
suspend fun uploadImage(@Part file: MultipartBody.Part): String
+
+ /**
+ * Banner
+ */
+ @POST("/deviceInfo/add")
+ suspend fun addDevice(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
index a31d9c3..7dff2a3 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
@@ -3,8 +3,10 @@
import com.casic.br.model.UserDetailModel
import com.casic.br.utils.AuthenticationHelper
import com.casic.br.utils.LocaleConstant
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
import com.pengxh.kt.lite.utils.RetrofitFactory.createRetrofit
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.sdk.bean.DeviceBean
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
@@ -207,4 +209,44 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(imagePart)
}
+
+ /**
+ * 添加设备到自己服务器
+ */
+ suspend fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel): String {
+ val paramObject = JSONObject()
+ paramObject.put("snCode", "")
+ paramObject.put("deviceId", devResp.devId)
+ paramObject.put("brandCode", "")
+ paramObject.put("brandName", "")
+ paramObject.put("productCode", devResp.productId)
+ paramObject.put("productName", "")
+ paramObject.put("produceDate", "")
+ paramObject.put("deviceStatus", 1)
+ paramObject.put("deviceActive", 1)
+ paramObject.put("deviceActiveTime", devResp.time)
+ paramObject.put("deviceBindUser", 1)
+ paramObject.put("deviceName", devResp.name)
+ paramObject.put("deviceHardwareVersion", devResp.bv)
+ paramObject.put("deviceSoftwareVersion", devResp.pv)
+ paramObject.put("deviceCoreParts", "")
+ paramObject.put("deviceMac", devResp.mac)
+ paramObject.put("deviceIp", devResp.ip)
+ paramObject.put("productCategory", devResp.category)
+ paramObject.put("internationalCode", "")
+ paramObject.put("productSize", "")
+ paramObject.put("productWeight", "")
+ paramObject.put("productStatus", "")
+ paramObject.put("productVersion", devResp.productBean.productVer)
+ paramObject.put("productQuality", "")
+ paramObject.put("productColor", devResp.productBean)
+ paramObject.put("userAccount", userModel.account)
+ paramObject.put("userName", userModel.name)
+ paramObject.put("userPhone", userModel.phone)
+ paramObject.put("userBindDate", System.currentTimeMillis().timestampToCompleteDate())
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addDevice(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
new file mode 100644
index 0000000..c3b861d
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -0,0 +1,111 @@
+package com.casic.br.view
+
+import android.util.Log
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.DeserializeModel
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.vm.DeviceViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.builder.ActivatorBuilder
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.enums.ActivatorModelEnum
+import kotlinx.android.synthetic.main.activity_connect_device.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class ConnectDeviceActivity : KotlinBaseActivity() {
+
+ private val kTag = "ResetDeviceActivity"
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_connect_device
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ }
+
+ override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ if (!confirmCheckBox.isChecked) {
+ "请确认设备指示灯是否闪烁".show(this)
+ return@setOnClickListener
+ }
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val userModel = DeserializeModel.getUserModel()!!
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String) {
+ //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
+ val builder = ActivatorBuilder().apply {
+ this.ssid = params[0]
+ this.context = this@ConnectDeviceActivity
+ this.password = params[1]
+ this.activatorModel = ActivatorModelEnum.TY_EZ
+ this.timeOut = 100
+ this.token = token
+ this.listener = object : ITuyaSmartActivatorListener {
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.d(kTag, "errorMsg: $errorMsg")
+ "添加设备超时".show(this@ConnectDeviceActivity)
+ LoadingDialogHub.dismiss()
+ }
+
+ override fun onActiveSuccess(devResp: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(devResp!!,userModel)
+ }
+
+ override fun onStep(step: String?, data: Any?) {
+ LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
+ }
+
+ override fun onFailure(s: String, s1: String) {
+ Log.e(kTag, "onFailure: $s")
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重置设备重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
deleted file mode 100644
index 11c40dc..0000000
--- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.casic.br.view
-
-import android.util.Log
-import android.view.View
-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.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.builder.ActivatorBuilder
-import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
-import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
-import com.tuya.smart.sdk.bean.DeviceBean
-import com.tuya.smart.sdk.enums.ActivatorModelEnum
-import kotlinx.android.synthetic.main.activity_reset_device.*
-import kotlinx.android.synthetic.main.include_left_back_title.*
-import java.util.*
-
-class ResetDeviceActivity : KotlinBaseActivity() {
-
- private val kTag = "ResetDeviceActivity"
- private lateinit var params: ArrayList
-
- override fun initLayoutView(): Int = R.layout.activity_reset_device
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- titleView.visibility = View.GONE
- }
-
- override fun initData() {
- params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- }
-
- override fun initEvent() {
- nextStepButton.setOnClickListener {
- if (!confirmCheckBox.isChecked) {
- "请确认设备指示灯是否闪烁".show(this)
- return@setOnClickListener
- }
- LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
- object : ITuyaActivatorGetToken {
- override fun onSuccess(token: String) {
- Log.d(kTag, "token: $token")
- //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
- val builder = ActivatorBuilder().apply {
- this.ssid = params[0]
- this.context = this@ResetDeviceActivity
- this.password = params[1]
- this.activatorModel = ActivatorModelEnum.TY_EZ
- this.timeOut = 100
- this.token = token
- this.listener = object : ITuyaSmartActivatorListener {
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.d(kTag, "errorMsg: $errorMsg")
- "添加设备超时".show(this@ResetDeviceActivity)
- LoadingDialogHub.dismiss()
- }
-
- override fun onActiveSuccess(devResp: DeviceBean?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
-
- override fun onStep(step: String?, data: Any?) {
- Log.d(kTag, "onStep: $step")
- LoadingDialogHub.dismiss()
- }
- }
- }
- TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
- }
-
- override fun onFailure(s: String, s1: String) {
- Log.e(kTag, "onFailure: $s")
- LoadingDialogHub.dismiss()
- }
- })
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
index a432adc..c81015b 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -58,7 +58,7 @@
"请输入WiFi密码".show(this)
return@setOnClickListener
}
- navigatePageTo(arrayListOf(wifiName, wifiKey))
+ navigatePageTo(arrayListOf(wifiName, wifiKey))
}
}
diff --git a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt
new file mode 100644
index 0000000..55ecbb5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt
@@ -0,0 +1,28 @@
+package com.casic.br.vm
+
+import com.casic.br.base.BaseApplication
+import com.casic.br.extensions.separateResponseCode
+import com.casic.br.extensions.toErrorMessage
+import com.casic.br.model.UserDetailModel
+import com.casic.br.utils.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+import com.tuya.smart.sdk.bean.DeviceBean
+
+class DeviceViewModel : BaseViewModel() {
+ fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel) = launch({
+ val response = RetrofitServiceManager.addDevice(devResp, userModel)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ecbed59..d60335b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
index 16b4e19..510bca0 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
@@ -101,4 +101,13 @@
@Multipart
@POST("/file/uploadFile")
suspend fun uploadImage(@Part file: MultipartBody.Part): String
+
+ /**
+ * Banner
+ */
+ @POST("/deviceInfo/add")
+ suspend fun addDevice(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
index a31d9c3..7dff2a3 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
@@ -3,8 +3,10 @@
import com.casic.br.model.UserDetailModel
import com.casic.br.utils.AuthenticationHelper
import com.casic.br.utils.LocaleConstant
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
import com.pengxh.kt.lite.utils.RetrofitFactory.createRetrofit
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.sdk.bean.DeviceBean
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
@@ -207,4 +209,44 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(imagePart)
}
+
+ /**
+ * 添加设备到自己服务器
+ */
+ suspend fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel): String {
+ val paramObject = JSONObject()
+ paramObject.put("snCode", "")
+ paramObject.put("deviceId", devResp.devId)
+ paramObject.put("brandCode", "")
+ paramObject.put("brandName", "")
+ paramObject.put("productCode", devResp.productId)
+ paramObject.put("productName", "")
+ paramObject.put("produceDate", "")
+ paramObject.put("deviceStatus", 1)
+ paramObject.put("deviceActive", 1)
+ paramObject.put("deviceActiveTime", devResp.time)
+ paramObject.put("deviceBindUser", 1)
+ paramObject.put("deviceName", devResp.name)
+ paramObject.put("deviceHardwareVersion", devResp.bv)
+ paramObject.put("deviceSoftwareVersion", devResp.pv)
+ paramObject.put("deviceCoreParts", "")
+ paramObject.put("deviceMac", devResp.mac)
+ paramObject.put("deviceIp", devResp.ip)
+ paramObject.put("productCategory", devResp.category)
+ paramObject.put("internationalCode", "")
+ paramObject.put("productSize", "")
+ paramObject.put("productWeight", "")
+ paramObject.put("productStatus", "")
+ paramObject.put("productVersion", devResp.productBean.productVer)
+ paramObject.put("productQuality", "")
+ paramObject.put("productColor", devResp.productBean)
+ paramObject.put("userAccount", userModel.account)
+ paramObject.put("userName", userModel.name)
+ paramObject.put("userPhone", userModel.phone)
+ paramObject.put("userBindDate", System.currentTimeMillis().timestampToCompleteDate())
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addDevice(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
new file mode 100644
index 0000000..c3b861d
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -0,0 +1,111 @@
+package com.casic.br.view
+
+import android.util.Log
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.DeserializeModel
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.vm.DeviceViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.builder.ActivatorBuilder
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.enums.ActivatorModelEnum
+import kotlinx.android.synthetic.main.activity_connect_device.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class ConnectDeviceActivity : KotlinBaseActivity() {
+
+ private val kTag = "ResetDeviceActivity"
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_connect_device
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ }
+
+ override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ if (!confirmCheckBox.isChecked) {
+ "请确认设备指示灯是否闪烁".show(this)
+ return@setOnClickListener
+ }
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val userModel = DeserializeModel.getUserModel()!!
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String) {
+ //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
+ val builder = ActivatorBuilder().apply {
+ this.ssid = params[0]
+ this.context = this@ConnectDeviceActivity
+ this.password = params[1]
+ this.activatorModel = ActivatorModelEnum.TY_EZ
+ this.timeOut = 100
+ this.token = token
+ this.listener = object : ITuyaSmartActivatorListener {
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.d(kTag, "errorMsg: $errorMsg")
+ "添加设备超时".show(this@ConnectDeviceActivity)
+ LoadingDialogHub.dismiss()
+ }
+
+ override fun onActiveSuccess(devResp: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(devResp!!,userModel)
+ }
+
+ override fun onStep(step: String?, data: Any?) {
+ LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
+ }
+
+ override fun onFailure(s: String, s1: String) {
+ Log.e(kTag, "onFailure: $s")
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重置设备重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
deleted file mode 100644
index 11c40dc..0000000
--- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.casic.br.view
-
-import android.util.Log
-import android.view.View
-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.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.builder.ActivatorBuilder
-import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
-import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
-import com.tuya.smart.sdk.bean.DeviceBean
-import com.tuya.smart.sdk.enums.ActivatorModelEnum
-import kotlinx.android.synthetic.main.activity_reset_device.*
-import kotlinx.android.synthetic.main.include_left_back_title.*
-import java.util.*
-
-class ResetDeviceActivity : KotlinBaseActivity() {
-
- private val kTag = "ResetDeviceActivity"
- private lateinit var params: ArrayList
-
- override fun initLayoutView(): Int = R.layout.activity_reset_device
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- titleView.visibility = View.GONE
- }
-
- override fun initData() {
- params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- }
-
- override fun initEvent() {
- nextStepButton.setOnClickListener {
- if (!confirmCheckBox.isChecked) {
- "请确认设备指示灯是否闪烁".show(this)
- return@setOnClickListener
- }
- LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
- object : ITuyaActivatorGetToken {
- override fun onSuccess(token: String) {
- Log.d(kTag, "token: $token")
- //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
- val builder = ActivatorBuilder().apply {
- this.ssid = params[0]
- this.context = this@ResetDeviceActivity
- this.password = params[1]
- this.activatorModel = ActivatorModelEnum.TY_EZ
- this.timeOut = 100
- this.token = token
- this.listener = object : ITuyaSmartActivatorListener {
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.d(kTag, "errorMsg: $errorMsg")
- "添加设备超时".show(this@ResetDeviceActivity)
- LoadingDialogHub.dismiss()
- }
-
- override fun onActiveSuccess(devResp: DeviceBean?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
-
- override fun onStep(step: String?, data: Any?) {
- Log.d(kTag, "onStep: $step")
- LoadingDialogHub.dismiss()
- }
- }
- }
- TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
- }
-
- override fun onFailure(s: String, s1: String) {
- Log.e(kTag, "onFailure: $s")
- LoadingDialogHub.dismiss()
- }
- })
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
index a432adc..c81015b 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -58,7 +58,7 @@
"请输入WiFi密码".show(this)
return@setOnClickListener
}
- navigatePageTo(arrayListOf(wifiName, wifiKey))
+ navigatePageTo(arrayListOf(wifiName, wifiKey))
}
}
diff --git a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt
new file mode 100644
index 0000000..55ecbb5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt
@@ -0,0 +1,28 @@
+package com.casic.br.vm
+
+import com.casic.br.base.BaseApplication
+import com.casic.br.extensions.separateResponseCode
+import com.casic.br.extensions.toErrorMessage
+import com.casic.br.model.UserDetailModel
+import com.casic.br.utils.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+import com.tuya.smart.sdk.bean.DeviceBean
+
+class DeviceViewModel : BaseViewModel() {
+ fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel) = launch({
+ val response = RetrofitServiceManager.addDevice(devResp, userModel)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_connect_device.xml b/app/src/main/res/layout/activity_connect_device.xml
new file mode 100644
index 0000000..0091651
--- /dev/null
+++ b/app/src/main/res/layout/activity_connect_device.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ecbed59..d60335b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
index 16b4e19..510bca0 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitService.kt
@@ -101,4 +101,13 @@
@Multipart
@POST("/file/uploadFile")
suspend fun uploadImage(@Part file: MultipartBody.Part): String
+
+ /**
+ * Banner
+ */
+ @POST("/deviceInfo/add")
+ suspend fun addDevice(
+ @Header("token") token: String,
+ @Body requestBody: RequestBody
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
index a31d9c3..7dff2a3 100644
--- a/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/utils/retrofit/RetrofitServiceManager.kt
@@ -3,8 +3,10 @@
import com.casic.br.model.UserDetailModel
import com.casic.br.utils.AuthenticationHelper
import com.casic.br.utils.LocaleConstant
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
import com.pengxh.kt.lite.utils.RetrofitFactory.createRetrofit
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.tuya.smart.sdk.bean.DeviceBean
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
@@ -207,4 +209,44 @@
val imagePart = MultipartBody.Part.createFormData("file", image.name, requestBody)
return api.uploadImage(imagePart)
}
+
+ /**
+ * 添加设备到自己服务器
+ */
+ suspend fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel): String {
+ val paramObject = JSONObject()
+ paramObject.put("snCode", "")
+ paramObject.put("deviceId", devResp.devId)
+ paramObject.put("brandCode", "")
+ paramObject.put("brandName", "")
+ paramObject.put("productCode", devResp.productId)
+ paramObject.put("productName", "")
+ paramObject.put("produceDate", "")
+ paramObject.put("deviceStatus", 1)
+ paramObject.put("deviceActive", 1)
+ paramObject.put("deviceActiveTime", devResp.time)
+ paramObject.put("deviceBindUser", 1)
+ paramObject.put("deviceName", devResp.name)
+ paramObject.put("deviceHardwareVersion", devResp.bv)
+ paramObject.put("deviceSoftwareVersion", devResp.pv)
+ paramObject.put("deviceCoreParts", "")
+ paramObject.put("deviceMac", devResp.mac)
+ paramObject.put("deviceIp", devResp.ip)
+ paramObject.put("productCategory", devResp.category)
+ paramObject.put("internationalCode", "")
+ paramObject.put("productSize", "")
+ paramObject.put("productWeight", "")
+ paramObject.put("productStatus", "")
+ paramObject.put("productVersion", devResp.productBean.productVer)
+ paramObject.put("productQuality", "")
+ paramObject.put("productColor", devResp.productBean)
+ paramObject.put("userAccount", userModel.account)
+ paramObject.put("userName", userModel.name)
+ paramObject.put("userPhone", userModel.phone)
+ paramObject.put("userBindDate", System.currentTimeMillis().timestampToCompleteDate())
+ val requestBody = paramObject.toString().toRequestBody(
+ "application/json;charset=UTF-8".toMediaType()
+ )
+ return api.addDevice(AuthenticationHelper.token!!, requestBody)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
new file mode 100644
index 0000000..c3b861d
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -0,0 +1,111 @@
+package com.casic.br.view
+
+import android.util.Log
+import android.view.View
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.R
+import com.casic.br.extensions.initLayoutImmersionBar
+import com.casic.br.utils.DeserializeModel
+import com.casic.br.utils.LoadingDialogHub
+import com.casic.br.utils.LocaleConstant
+import com.casic.br.vm.DeviceViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.builder.ActivatorBuilder
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.enums.ActivatorModelEnum
+import kotlinx.android.synthetic.main.activity_connect_device.*
+import kotlinx.android.synthetic.main.include_left_back_title.*
+import java.util.*
+
+class ConnectDeviceActivity : KotlinBaseActivity() {
+
+ private val kTag = "ResetDeviceActivity"
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_connect_device
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.visibility = View.GONE
+ }
+
+ override fun initData() {
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+ }
+
+ override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ if (!confirmCheckBox.isChecked) {
+ "请确认设备指示灯是否闪烁".show(this)
+ return@setOnClickListener
+ }
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ val userModel = DeserializeModel.getUserModel()!!
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
+ object : ITuyaActivatorGetToken {
+ override fun onSuccess(token: String) {
+ //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
+ val builder = ActivatorBuilder().apply {
+ this.ssid = params[0]
+ this.context = this@ConnectDeviceActivity
+ this.password = params[1]
+ this.activatorModel = ActivatorModelEnum.TY_EZ
+ this.timeOut = 100
+ this.token = token
+ this.listener = object : ITuyaSmartActivatorListener {
+ override fun onError(errorCode: String?, errorMsg: String?) {
+ Log.d(kTag, "errorMsg: $errorMsg")
+ "添加设备超时".show(this@ConnectDeviceActivity)
+ LoadingDialogHub.dismiss()
+ }
+
+ override fun onActiveSuccess(devResp: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(devResp!!,userModel)
+ }
+
+ override fun onStep(step: String?, data: Any?) {
+ LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
+ }
+
+ override fun onFailure(s: String, s1: String) {
+ Log.e(kTag, "onFailure: $s")
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重置设备重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
deleted file mode 100644
index 11c40dc..0000000
--- a/app/src/main/java/com/casic/br/view/ResetDeviceActivity.kt
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.casic.br.view
-
-import android.util.Log
-import android.view.View
-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.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.Constant
-import com.pengxh.kt.lite.utils.SaveKeyValues
-import com.tuya.smart.home.sdk.TuyaHomeSdk
-import com.tuya.smart.home.sdk.builder.ActivatorBuilder
-import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
-import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
-import com.tuya.smart.sdk.bean.DeviceBean
-import com.tuya.smart.sdk.enums.ActivatorModelEnum
-import kotlinx.android.synthetic.main.activity_reset_device.*
-import kotlinx.android.synthetic.main.include_left_back_title.*
-import java.util.*
-
-class ResetDeviceActivity : KotlinBaseActivity() {
-
- private val kTag = "ResetDeviceActivity"
- private lateinit var params: ArrayList
-
- override fun initLayoutView(): Int = R.layout.activity_reset_device
-
- override fun observeRequestState() {
-
- }
-
- override fun setupTopBarLayout() {
- ImmersionBar.with(this).statusBarDarkFont(true).init()
- initLayoutImmersionBar(rootView)
- leftBackView.setOnClickListener { finish() }
- titleView.visibility = View.GONE
- }
-
- override fun initData() {
- params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
- }
-
- override fun initEvent() {
- nextStepButton.setOnClickListener {
- if (!confirmCheckBox.isChecked) {
- "请确认设备指示灯是否闪烁".show(this)
- return@setOnClickListener
- }
- LoadingDialogHub.show(this, "设备配网中,请稍后")
- val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
- TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
- object : ITuyaActivatorGetToken {
- override fun onSuccess(token: String) {
- Log.d(kTag, "token: $token")
- //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
- val builder = ActivatorBuilder().apply {
- this.ssid = params[0]
- this.context = this@ResetDeviceActivity
- this.password = params[1]
- this.activatorModel = ActivatorModelEnum.TY_EZ
- this.timeOut = 100
- this.token = token
- this.listener = object : ITuyaSmartActivatorListener {
- override fun onError(errorCode: String?, errorMsg: String?) {
- Log.d(kTag, "errorMsg: $errorMsg")
- "添加设备超时".show(this@ResetDeviceActivity)
- LoadingDialogHub.dismiss()
- }
-
- override fun onActiveSuccess(devResp: DeviceBean?) {
- LoadingDialogHub.dismiss()
- navigatePageTo()
- }
-
- override fun onStep(step: String?, data: Any?) {
- Log.d(kTag, "onStep: $step")
- LoadingDialogHub.dismiss()
- }
- }
- }
- TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
- }
-
- override fun onFailure(s: String, s1: String) {
- Log.e(kTag, "onFailure: $s")
- LoadingDialogHub.dismiss()
- }
- })
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
index a432adc..c81015b 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -58,7 +58,7 @@
"请输入WiFi密码".show(this)
return@setOnClickListener
}
- navigatePageTo(arrayListOf(wifiName, wifiKey))
+ navigatePageTo(arrayListOf(wifiName, wifiKey))
}
}
diff --git a/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt
new file mode 100644
index 0000000..55ecbb5
--- /dev/null
+++ b/app/src/main/java/com/casic/br/vm/DeviceViewModel.kt
@@ -0,0 +1,28 @@
+package com.casic.br.vm
+
+import com.casic.br.base.BaseApplication
+import com.casic.br.extensions.separateResponseCode
+import com.casic.br.extensions.toErrorMessage
+import com.casic.br.model.UserDetailModel
+import com.casic.br.utils.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import com.pengxh.kt.lite.vm.LoadState
+import com.tuya.smart.sdk.bean.DeviceBean
+
+class DeviceViewModel : BaseViewModel() {
+ fun addDevice(devResp: DeviceBean, userModel: UserDetailModel.DataModel) = launch({
+ val response = RetrofitServiceManager.addDevice(devResp, userModel)
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.printStackTrace()
+ })
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_connect_device.xml b/app/src/main/res/layout/activity_connect_device.xml
new file mode 100644
index 0000000..0091651
--- /dev/null
+++ b/app/src/main/res/layout/activity_connect_device.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_reset_device.xml b/app/src/main/res/layout/activity_reset_device.xml
deleted file mode 100644
index ae41d89..0000000
--- a/app/src/main/res/layout/activity_reset_device.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file