diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index c495da7..ed28b03 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -14,7 +14,8 @@
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.READ_PHONE_STATE
+ Manifest.permission.READ_PHONE_STATE, Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN
)
val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index c495da7..ed28b03 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -14,7 +14,8 @@
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.READ_PHONE_STATE
+ Manifest.permission.READ_PHONE_STATE, Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN
)
val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后")
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 789ff25..7c6591f 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
@@ -225,31 +225,19 @@
*/
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("deviceActiveTime", (devResp.time * 1000L).timestampToCompleteDate())
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)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index c495da7..ed28b03 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -14,7 +14,8 @@
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.READ_PHONE_STATE
+ Manifest.permission.READ_PHONE_STATE, Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN
)
val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后")
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 789ff25..7c6591f 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
@@ -225,31 +225,19 @@
*/
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("deviceActiveTime", (devResp.time * 1000L).timestampToCompleteDate())
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)
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index c3b861d..a796171 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -28,7 +28,7 @@
class ConnectDeviceActivity : KotlinBaseActivity() {
- private val kTag = "ResetDeviceActivity"
+ private val kTag = "ConnectDeviceActivity"
private lateinit var params: ArrayList
private lateinit var deviceViewModel: DeviceViewModel
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index c495da7..ed28b03 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -14,7 +14,8 @@
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.READ_PHONE_STATE
+ Manifest.permission.READ_PHONE_STATE, Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN
)
val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后")
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 789ff25..7c6591f 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
@@ -225,31 +225,19 @@
*/
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("deviceActiveTime", (devResp.time * 1000L).timestampToCompleteDate())
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)
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index c3b861d..a796171 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -28,7 +28,7 @@
class ConnectDeviceActivity : KotlinBaseActivity() {
- private val kTag = "ResetDeviceActivity"
+ private val kTag = "ConnectDeviceActivity"
private lateinit var params: ArrayList
private lateinit var deviceViewModel: DeviceViewModel
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 6f4088a..0d4c255 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -95,12 +95,12 @@
userViewModel.enter(keyModel.data!!.sid!!, userPhone, dataByPublicKey)
userViewModel.loginResult.observe(this, {
if (it.code == 200) {
+ AuthenticationHelper.saveToken(it.data!!.token!!)
userViewModel.obtainUserDetail(userPhone)
userViewModel.userDetailResult.observe(this, { user ->
if (user.code == 200) {
SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
SaveKeyValues.putValue(LocaleConstant.USER_MODEL, user.toJson())
- AuthenticationHelper.saveToken(it.data!!.token!!)
LoadingDialogHub.dismiss()
PageNavigationManager.finishAllActivity()
navigatePageTo()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index c495da7..ed28b03 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -14,7 +14,8 @@
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.READ_PHONE_STATE
+ Manifest.permission.READ_PHONE_STATE, Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN
)
val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后")
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 789ff25..7c6591f 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
@@ -225,31 +225,19 @@
*/
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("deviceActiveTime", (devResp.time * 1000L).timestampToCompleteDate())
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)
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index c3b861d..a796171 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -28,7 +28,7 @@
class ConnectDeviceActivity : KotlinBaseActivity() {
- private val kTag = "ResetDeviceActivity"
+ private val kTag = "ConnectDeviceActivity"
private lateinit var params: ArrayList
private lateinit var deviceViewModel: DeviceViewModel
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 6f4088a..0d4c255 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -95,12 +95,12 @@
userViewModel.enter(keyModel.data!!.sid!!, userPhone, dataByPublicKey)
userViewModel.loginResult.observe(this, {
if (it.code == 200) {
+ AuthenticationHelper.saveToken(it.data!!.token!!)
userViewModel.obtainUserDetail(userPhone)
userViewModel.userDetailResult.observe(this, { user ->
if (user.code == 200) {
SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
SaveKeyValues.putValue(LocaleConstant.USER_MODEL, user.toJson())
- AuthenticationHelper.saveToken(it.data!!.token!!)
LoadingDialogHub.dismiss()
PageNavigationManager.finishAllActivity()
navigatePageTo()
diff --git a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
index 4375725..6014293 100644
--- a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
@@ -1,25 +1,205 @@
package com.casic.br.view
+import android.util.Log
+import android.view.KeyEvent
+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.casic.br.widgets.WaterRippleView
+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.android.ble.api.LeScanSetting
+import com.tuya.smart.android.ble.api.ScanDeviceBean
+import com.tuya.smart.android.ble.api.ScanType
+import com.tuya.smart.android.ble.api.TyBleScanResponse
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.ConfigProductInfoBean
+import com.tuya.smart.sdk.api.IMultiModeActivatorListener
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaDataCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.bean.MultiModeActivatorBean
+import kotlinx.android.synthetic.main.activity_select_bluetooth.*
+import kotlinx.android.synthetic.main.activity_select_wifi.rootView
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.*
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.waterRippleView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
class SelectBluetoothActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_select_wifi
+ private val kTag = "SelectBluetoothActivity"
+ private val context = this@SelectBluetoothActivity
+ private var isRunning = true
+ private lateinit var singleThreadExecutor: ExecutorService
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+ private var deviceBean: ScanDeviceBean? = null
- override fun observeRequestState() {
-
- }
+ override fun initLayoutView(): Int = R.layout.activity_select_bluetooth
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "搜索蓝牙设备"
}
override fun initData() {
+ //只有一个核心线程,当被占用时,其他的任务需要进入队列等待
+ singleThreadExecutor = Executors.newSingleThreadExecutor()
+ waterRippleView.setOnAnimationStartListener(object :
+ WaterRippleView.OnAnimationStartListener {
+ override fun onStart(view: WaterRippleView?) {
+ view?.start()
+ //开启线程搜索设备
+ Log.d(kTag, "onStart: 开始线程")
+ singleThreadExecutor.execute(searchRunnable)
+ isRunning = true
+ }
+ })
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+
+ val scanSetting = LeScanSetting.Builder().apply {
+ setTimeout(60000)
+ addScanType(ScanType.SINGLE)
+ }.build()
+ TuyaHomeSdk.getBleOperator().startLeScan(scanSetting, object : TyBleScanResponse {
+ override fun onResult(bean: ScanDeviceBean?) {
+ if (bean == null) {
+ Log.e(kTag, "onResult: 无法扫描到涂鸦蓝牙模组")
+ return
+ }
+ deviceBean = bean
+ TuyaHomeSdk.getActivatorInstance().getActivatorDeviceInfo(
+ deviceBean!!.productId, deviceBean!!.uuid, deviceBean!!.mac,
+ object : ITuyaDataCallback {
+ override fun onSuccess(result: ConfigProductInfoBean?) {
+ if (result == null) {
+ Log.e(kTag, "onResult: 无法获取涂鸦设备信息")
+ return
+ }
+ tipsView.text = "已搜索到蓝牙设备,基本信息如下"
+ deviceAddressView.text = String.format("设备地址:${deviceBean!!.address}")
+ deviceNameView.text = String.format("产品名称:${result.name}")
+ }
+
+ override fun onError(errorCode: String?, errorMessage: String?) {
+
+ }
+ })
+ }
+ })
+ }
+
+ private val searchRunnable = Runnable {
+ while (true) {
+ try {
+ if (!isRunning) {
+ Log.d(kTag, "run: 设备搜索线程休眠中...")
+ Thread.sleep(Long.MAX_VALUE)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ Log.d(kTag, "run: 设备搜索线程运行中...")
+ try {
+ //搜索设备
+ Thread.sleep(1000)
+ } catch (e: InterruptedException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ override fun onPause() {
+ super.onPause()
+ isRunning = false
+ waterRippleView.stop()
+ TuyaHomeSdk.getBleOperator().stopLeScan()
}
override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val userModel = DeserializeModel.getUserModel()!!
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
+ ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId.toLong()
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
+
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
+
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+
+ override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (deviceBean == null) {
+ return super.onKeyDown(keyCode, event)
+ }
+ TuyaHomeSdk.getActivator().newMultiModeActivator().stopActivator(deviceBean!!.uuid)
+ }
+ return super.onKeyDown(keyCode, event)
}
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index c495da7..ed28b03 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -14,7 +14,8 @@
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.READ_PHONE_STATE
+ Manifest.permission.READ_PHONE_STATE, Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN
)
val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后")
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 789ff25..7c6591f 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
@@ -225,31 +225,19 @@
*/
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("deviceActiveTime", (devResp.time * 1000L).timestampToCompleteDate())
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)
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index c3b861d..a796171 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -28,7 +28,7 @@
class ConnectDeviceActivity : KotlinBaseActivity() {
- private val kTag = "ResetDeviceActivity"
+ private val kTag = "ConnectDeviceActivity"
private lateinit var params: ArrayList
private lateinit var deviceViewModel: DeviceViewModel
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 6f4088a..0d4c255 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -95,12 +95,12 @@
userViewModel.enter(keyModel.data!!.sid!!, userPhone, dataByPublicKey)
userViewModel.loginResult.observe(this, {
if (it.code == 200) {
+ AuthenticationHelper.saveToken(it.data!!.token!!)
userViewModel.obtainUserDetail(userPhone)
userViewModel.userDetailResult.observe(this, { user ->
if (user.code == 200) {
SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
SaveKeyValues.putValue(LocaleConstant.USER_MODEL, user.toJson())
- AuthenticationHelper.saveToken(it.data!!.token!!)
LoadingDialogHub.dismiss()
PageNavigationManager.finishAllActivity()
navigatePageTo()
diff --git a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
index 4375725..6014293 100644
--- a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
@@ -1,25 +1,205 @@
package com.casic.br.view
+import android.util.Log
+import android.view.KeyEvent
+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.casic.br.widgets.WaterRippleView
+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.android.ble.api.LeScanSetting
+import com.tuya.smart.android.ble.api.ScanDeviceBean
+import com.tuya.smart.android.ble.api.ScanType
+import com.tuya.smart.android.ble.api.TyBleScanResponse
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.ConfigProductInfoBean
+import com.tuya.smart.sdk.api.IMultiModeActivatorListener
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaDataCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.bean.MultiModeActivatorBean
+import kotlinx.android.synthetic.main.activity_select_bluetooth.*
+import kotlinx.android.synthetic.main.activity_select_wifi.rootView
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.*
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.waterRippleView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
class SelectBluetoothActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_select_wifi
+ private val kTag = "SelectBluetoothActivity"
+ private val context = this@SelectBluetoothActivity
+ private var isRunning = true
+ private lateinit var singleThreadExecutor: ExecutorService
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+ private var deviceBean: ScanDeviceBean? = null
- override fun observeRequestState() {
-
- }
+ override fun initLayoutView(): Int = R.layout.activity_select_bluetooth
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "搜索蓝牙设备"
}
override fun initData() {
+ //只有一个核心线程,当被占用时,其他的任务需要进入队列等待
+ singleThreadExecutor = Executors.newSingleThreadExecutor()
+ waterRippleView.setOnAnimationStartListener(object :
+ WaterRippleView.OnAnimationStartListener {
+ override fun onStart(view: WaterRippleView?) {
+ view?.start()
+ //开启线程搜索设备
+ Log.d(kTag, "onStart: 开始线程")
+ singleThreadExecutor.execute(searchRunnable)
+ isRunning = true
+ }
+ })
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+
+ val scanSetting = LeScanSetting.Builder().apply {
+ setTimeout(60000)
+ addScanType(ScanType.SINGLE)
+ }.build()
+ TuyaHomeSdk.getBleOperator().startLeScan(scanSetting, object : TyBleScanResponse {
+ override fun onResult(bean: ScanDeviceBean?) {
+ if (bean == null) {
+ Log.e(kTag, "onResult: 无法扫描到涂鸦蓝牙模组")
+ return
+ }
+ deviceBean = bean
+ TuyaHomeSdk.getActivatorInstance().getActivatorDeviceInfo(
+ deviceBean!!.productId, deviceBean!!.uuid, deviceBean!!.mac,
+ object : ITuyaDataCallback {
+ override fun onSuccess(result: ConfigProductInfoBean?) {
+ if (result == null) {
+ Log.e(kTag, "onResult: 无法获取涂鸦设备信息")
+ return
+ }
+ tipsView.text = "已搜索到蓝牙设备,基本信息如下"
+ deviceAddressView.text = String.format("设备地址:${deviceBean!!.address}")
+ deviceNameView.text = String.format("产品名称:${result.name}")
+ }
+
+ override fun onError(errorCode: String?, errorMessage: String?) {
+
+ }
+ })
+ }
+ })
+ }
+
+ private val searchRunnable = Runnable {
+ while (true) {
+ try {
+ if (!isRunning) {
+ Log.d(kTag, "run: 设备搜索线程休眠中...")
+ Thread.sleep(Long.MAX_VALUE)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ Log.d(kTag, "run: 设备搜索线程运行中...")
+ try {
+ //搜索设备
+ Thread.sleep(1000)
+ } catch (e: InterruptedException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ override fun onPause() {
+ super.onPause()
+ isRunning = false
+ waterRippleView.stop()
+ TuyaHomeSdk.getBleOperator().stopLeScan()
}
override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val userModel = DeserializeModel.getUserModel()!!
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
+ ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId.toLong()
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
+
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
+
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+
+ override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (deviceBean == null) {
+ return super.onKeyDown(keyCode, event)
+ }
+ TuyaHomeSdk.getActivator().newMultiModeActivator().stopActivator(deviceBean!!.uuid)
+ }
+ return super.onKeyDown(keyCode, event)
}
}
\ 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 98778ea..0cde6b9 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.content.Intent
+import android.graphics.Color
import android.net.wifi.WifiManager
import android.provider.Settings
import android.view.View
@@ -13,6 +14,7 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import kotlinx.android.synthetic.main.activity_login.*
import kotlinx.android.synthetic.main.activity_select_wifi.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -23,8 +25,6 @@
class SelectWiFiActivity : KotlinBaseActivity() {
- private val context: Context = this@SelectWiFiActivity
- private val kTag = "SelectWifiActivity"
private val wifi by lazy { applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
override fun initLayoutView(): Int = R.layout.activity_select_wifi
@@ -62,7 +62,20 @@
}
//保存Wi-Fi密码
SaveKeyValues.putValue(LocaleConstant.WIFI_PASSWORD, wifiKey)
- navigatePageTo(arrayListOf(wifiName, wifiKey))
+ val wifiConfig = arrayListOf(wifiName, wifiKey)
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("Wi-Fi连接模式", "蓝牙连接模式"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> navigatePageTo(wifiConfig)
+ 1 -> navigatePageTo(wifiConfig)
+ }
+ }
+ })
+ .build().show()
}
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index c495da7..ed28b03 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -14,7 +14,8 @@
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.READ_PHONE_STATE
+ Manifest.permission.READ_PHONE_STATE, Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN
)
val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后")
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 789ff25..7c6591f 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
@@ -225,31 +225,19 @@
*/
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("deviceActiveTime", (devResp.time * 1000L).timestampToCompleteDate())
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)
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index c3b861d..a796171 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -28,7 +28,7 @@
class ConnectDeviceActivity : KotlinBaseActivity() {
- private val kTag = "ResetDeviceActivity"
+ private val kTag = "ConnectDeviceActivity"
private lateinit var params: ArrayList
private lateinit var deviceViewModel: DeviceViewModel
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 6f4088a..0d4c255 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -95,12 +95,12 @@
userViewModel.enter(keyModel.data!!.sid!!, userPhone, dataByPublicKey)
userViewModel.loginResult.observe(this, {
if (it.code == 200) {
+ AuthenticationHelper.saveToken(it.data!!.token!!)
userViewModel.obtainUserDetail(userPhone)
userViewModel.userDetailResult.observe(this, { user ->
if (user.code == 200) {
SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
SaveKeyValues.putValue(LocaleConstant.USER_MODEL, user.toJson())
- AuthenticationHelper.saveToken(it.data!!.token!!)
LoadingDialogHub.dismiss()
PageNavigationManager.finishAllActivity()
navigatePageTo()
diff --git a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
index 4375725..6014293 100644
--- a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
@@ -1,25 +1,205 @@
package com.casic.br.view
+import android.util.Log
+import android.view.KeyEvent
+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.casic.br.widgets.WaterRippleView
+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.android.ble.api.LeScanSetting
+import com.tuya.smart.android.ble.api.ScanDeviceBean
+import com.tuya.smart.android.ble.api.ScanType
+import com.tuya.smart.android.ble.api.TyBleScanResponse
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.ConfigProductInfoBean
+import com.tuya.smart.sdk.api.IMultiModeActivatorListener
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaDataCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.bean.MultiModeActivatorBean
+import kotlinx.android.synthetic.main.activity_select_bluetooth.*
+import kotlinx.android.synthetic.main.activity_select_wifi.rootView
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.*
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.waterRippleView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
class SelectBluetoothActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_select_wifi
+ private val kTag = "SelectBluetoothActivity"
+ private val context = this@SelectBluetoothActivity
+ private var isRunning = true
+ private lateinit var singleThreadExecutor: ExecutorService
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+ private var deviceBean: ScanDeviceBean? = null
- override fun observeRequestState() {
-
- }
+ override fun initLayoutView(): Int = R.layout.activity_select_bluetooth
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "搜索蓝牙设备"
}
override fun initData() {
+ //只有一个核心线程,当被占用时,其他的任务需要进入队列等待
+ singleThreadExecutor = Executors.newSingleThreadExecutor()
+ waterRippleView.setOnAnimationStartListener(object :
+ WaterRippleView.OnAnimationStartListener {
+ override fun onStart(view: WaterRippleView?) {
+ view?.start()
+ //开启线程搜索设备
+ Log.d(kTag, "onStart: 开始线程")
+ singleThreadExecutor.execute(searchRunnable)
+ isRunning = true
+ }
+ })
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+
+ val scanSetting = LeScanSetting.Builder().apply {
+ setTimeout(60000)
+ addScanType(ScanType.SINGLE)
+ }.build()
+ TuyaHomeSdk.getBleOperator().startLeScan(scanSetting, object : TyBleScanResponse {
+ override fun onResult(bean: ScanDeviceBean?) {
+ if (bean == null) {
+ Log.e(kTag, "onResult: 无法扫描到涂鸦蓝牙模组")
+ return
+ }
+ deviceBean = bean
+ TuyaHomeSdk.getActivatorInstance().getActivatorDeviceInfo(
+ deviceBean!!.productId, deviceBean!!.uuid, deviceBean!!.mac,
+ object : ITuyaDataCallback {
+ override fun onSuccess(result: ConfigProductInfoBean?) {
+ if (result == null) {
+ Log.e(kTag, "onResult: 无法获取涂鸦设备信息")
+ return
+ }
+ tipsView.text = "已搜索到蓝牙设备,基本信息如下"
+ deviceAddressView.text = String.format("设备地址:${deviceBean!!.address}")
+ deviceNameView.text = String.format("产品名称:${result.name}")
+ }
+
+ override fun onError(errorCode: String?, errorMessage: String?) {
+
+ }
+ })
+ }
+ })
+ }
+
+ private val searchRunnable = Runnable {
+ while (true) {
+ try {
+ if (!isRunning) {
+ Log.d(kTag, "run: 设备搜索线程休眠中...")
+ Thread.sleep(Long.MAX_VALUE)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ Log.d(kTag, "run: 设备搜索线程运行中...")
+ try {
+ //搜索设备
+ Thread.sleep(1000)
+ } catch (e: InterruptedException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ override fun onPause() {
+ super.onPause()
+ isRunning = false
+ waterRippleView.stop()
+ TuyaHomeSdk.getBleOperator().stopLeScan()
}
override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val userModel = DeserializeModel.getUserModel()!!
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
+ ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId.toLong()
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
+
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
+
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+
+ override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (deviceBean == null) {
+ return super.onKeyDown(keyCode, event)
+ }
+ TuyaHomeSdk.getActivator().newMultiModeActivator().stopActivator(deviceBean!!.uuid)
+ }
+ return super.onKeyDown(keyCode, event)
}
}
\ 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 98778ea..0cde6b9 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.content.Intent
+import android.graphics.Color
import android.net.wifi.WifiManager
import android.provider.Settings
import android.view.View
@@ -13,6 +14,7 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import kotlinx.android.synthetic.main.activity_login.*
import kotlinx.android.synthetic.main.activity_select_wifi.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -23,8 +25,6 @@
class SelectWiFiActivity : KotlinBaseActivity() {
- private val context: Context = this@SelectWiFiActivity
- private val kTag = "SelectWifiActivity"
private val wifi by lazy { applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
override fun initLayoutView(): Int = R.layout.activity_select_wifi
@@ -62,7 +62,20 @@
}
//保存Wi-Fi密码
SaveKeyValues.putValue(LocaleConstant.WIFI_PASSWORD, wifiKey)
- navigatePageTo(arrayListOf(wifiName, wifiKey))
+ val wifiConfig = arrayListOf(wifiName, wifiKey)
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("Wi-Fi连接模式", "蓝牙连接模式"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> navigatePageTo(wifiConfig)
+ 1 -> navigatePageTo(wifiConfig)
+ }
+ }
+ })
+ .build().show()
}
}
diff --git a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt
index 05fe059..c81e688 100644
--- a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt
+++ b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt
@@ -31,8 +31,6 @@
listModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
- } else {
- response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
it.printStackTrace()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index c495da7..ed28b03 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -14,7 +14,8 @@
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.READ_PHONE_STATE
+ Manifest.permission.READ_PHONE_STATE, Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN
)
val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后")
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 789ff25..7c6591f 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
@@ -225,31 +225,19 @@
*/
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("deviceActiveTime", (devResp.time * 1000L).timestampToCompleteDate())
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)
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index c3b861d..a796171 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -28,7 +28,7 @@
class ConnectDeviceActivity : KotlinBaseActivity() {
- private val kTag = "ResetDeviceActivity"
+ private val kTag = "ConnectDeviceActivity"
private lateinit var params: ArrayList
private lateinit var deviceViewModel: DeviceViewModel
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 6f4088a..0d4c255 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -95,12 +95,12 @@
userViewModel.enter(keyModel.data!!.sid!!, userPhone, dataByPublicKey)
userViewModel.loginResult.observe(this, {
if (it.code == 200) {
+ AuthenticationHelper.saveToken(it.data!!.token!!)
userViewModel.obtainUserDetail(userPhone)
userViewModel.userDetailResult.observe(this, { user ->
if (user.code == 200) {
SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
SaveKeyValues.putValue(LocaleConstant.USER_MODEL, user.toJson())
- AuthenticationHelper.saveToken(it.data!!.token!!)
LoadingDialogHub.dismiss()
PageNavigationManager.finishAllActivity()
navigatePageTo()
diff --git a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
index 4375725..6014293 100644
--- a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
@@ -1,25 +1,205 @@
package com.casic.br.view
+import android.util.Log
+import android.view.KeyEvent
+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.casic.br.widgets.WaterRippleView
+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.android.ble.api.LeScanSetting
+import com.tuya.smart.android.ble.api.ScanDeviceBean
+import com.tuya.smart.android.ble.api.ScanType
+import com.tuya.smart.android.ble.api.TyBleScanResponse
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.ConfigProductInfoBean
+import com.tuya.smart.sdk.api.IMultiModeActivatorListener
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaDataCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.bean.MultiModeActivatorBean
+import kotlinx.android.synthetic.main.activity_select_bluetooth.*
+import kotlinx.android.synthetic.main.activity_select_wifi.rootView
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.*
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.waterRippleView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
class SelectBluetoothActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_select_wifi
+ private val kTag = "SelectBluetoothActivity"
+ private val context = this@SelectBluetoothActivity
+ private var isRunning = true
+ private lateinit var singleThreadExecutor: ExecutorService
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+ private var deviceBean: ScanDeviceBean? = null
- override fun observeRequestState() {
-
- }
+ override fun initLayoutView(): Int = R.layout.activity_select_bluetooth
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "搜索蓝牙设备"
}
override fun initData() {
+ //只有一个核心线程,当被占用时,其他的任务需要进入队列等待
+ singleThreadExecutor = Executors.newSingleThreadExecutor()
+ waterRippleView.setOnAnimationStartListener(object :
+ WaterRippleView.OnAnimationStartListener {
+ override fun onStart(view: WaterRippleView?) {
+ view?.start()
+ //开启线程搜索设备
+ Log.d(kTag, "onStart: 开始线程")
+ singleThreadExecutor.execute(searchRunnable)
+ isRunning = true
+ }
+ })
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+
+ val scanSetting = LeScanSetting.Builder().apply {
+ setTimeout(60000)
+ addScanType(ScanType.SINGLE)
+ }.build()
+ TuyaHomeSdk.getBleOperator().startLeScan(scanSetting, object : TyBleScanResponse {
+ override fun onResult(bean: ScanDeviceBean?) {
+ if (bean == null) {
+ Log.e(kTag, "onResult: 无法扫描到涂鸦蓝牙模组")
+ return
+ }
+ deviceBean = bean
+ TuyaHomeSdk.getActivatorInstance().getActivatorDeviceInfo(
+ deviceBean!!.productId, deviceBean!!.uuid, deviceBean!!.mac,
+ object : ITuyaDataCallback {
+ override fun onSuccess(result: ConfigProductInfoBean?) {
+ if (result == null) {
+ Log.e(kTag, "onResult: 无法获取涂鸦设备信息")
+ return
+ }
+ tipsView.text = "已搜索到蓝牙设备,基本信息如下"
+ deviceAddressView.text = String.format("设备地址:${deviceBean!!.address}")
+ deviceNameView.text = String.format("产品名称:${result.name}")
+ }
+
+ override fun onError(errorCode: String?, errorMessage: String?) {
+
+ }
+ })
+ }
+ })
+ }
+
+ private val searchRunnable = Runnable {
+ while (true) {
+ try {
+ if (!isRunning) {
+ Log.d(kTag, "run: 设备搜索线程休眠中...")
+ Thread.sleep(Long.MAX_VALUE)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ Log.d(kTag, "run: 设备搜索线程运行中...")
+ try {
+ //搜索设备
+ Thread.sleep(1000)
+ } catch (e: InterruptedException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ override fun onPause() {
+ super.onPause()
+ isRunning = false
+ waterRippleView.stop()
+ TuyaHomeSdk.getBleOperator().stopLeScan()
}
override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val userModel = DeserializeModel.getUserModel()!!
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
+ ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId.toLong()
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
+
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
+
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+
+ override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (deviceBean == null) {
+ return super.onKeyDown(keyCode, event)
+ }
+ TuyaHomeSdk.getActivator().newMultiModeActivator().stopActivator(deviceBean!!.uuid)
+ }
+ return super.onKeyDown(keyCode, event)
}
}
\ 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 98778ea..0cde6b9 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.content.Intent
+import android.graphics.Color
import android.net.wifi.WifiManager
import android.provider.Settings
import android.view.View
@@ -13,6 +14,7 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import kotlinx.android.synthetic.main.activity_login.*
import kotlinx.android.synthetic.main.activity_select_wifi.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -23,8 +25,6 @@
class SelectWiFiActivity : KotlinBaseActivity() {
- private val context: Context = this@SelectWiFiActivity
- private val kTag = "SelectWifiActivity"
private val wifi by lazy { applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
override fun initLayoutView(): Int = R.layout.activity_select_wifi
@@ -62,7 +62,20 @@
}
//保存Wi-Fi密码
SaveKeyValues.putValue(LocaleConstant.WIFI_PASSWORD, wifiKey)
- navigatePageTo(arrayListOf(wifiName, wifiKey))
+ val wifiConfig = arrayListOf(wifiName, wifiKey)
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("Wi-Fi连接模式", "蓝牙连接模式"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> navigatePageTo(wifiConfig)
+ 1 -> navigatePageTo(wifiConfig)
+ }
+ }
+ })
+ .build().show()
}
}
diff --git a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt
index 05fe059..c81e688 100644
--- a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt
+++ b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt
@@ -31,8 +31,6 @@
listModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
- } else {
- response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
it.printStackTrace()
diff --git a/app/src/main/res/layout/activity_select_bluetooth.xml b/app/src/main/res/layout/activity_select_bluetooth.xml
new file mode 100644
index 0000000..8a2e3b3
--- /dev/null
+++ b/app/src/main/res/layout/activity_select_bluetooth.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d60335b..3afcc05 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
()
+ if (DeserializeModel.isLogin()) {
+ requireContext().navigatePageTo()
+ } else {
+ requireContext().navigatePageTo()
+ }
}
override fun onItemClick(position: Int) {
// 需要根据设备类型显示不同的页面
- val deviceModel = dataBeans[position]
- when {
- deviceModel.deviceName.contains("热水器") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
+ if (DeserializeModel.isLogin()) {
+ val deviceModel = dataBeans[position]
+ when {
+ deviceModel.deviceName.contains("热水器") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("油烟机") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("壁挂炉") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
+ deviceModel.deviceName.contains("燃气灶") -> {
+ requireContext().navigatePageTo(deviceModel.deviceId)
+ }
}
- deviceModel.deviceName.contains("油烟机") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("壁挂炉") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
- deviceModel.deviceName.contains("燃气灶") -> {
- requireContext().navigatePageTo(deviceModel.deviceId)
- }
+ } else {
+ requireContext().navigatePageTo()
}
}
diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
index c495da7..ed28b03 100644
--- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt
@@ -14,7 +14,8 @@
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.READ_PHONE_STATE
+ Manifest.permission.READ_PHONE_STATE, Manifest.permission.BLUETOOTH,
+ Manifest.permission.BLUETOOTH_ADMIN
)
val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher)
val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后")
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 789ff25..7c6591f 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
@@ -225,31 +225,19 @@
*/
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("deviceActiveTime", (devResp.time * 1000L).timestampToCompleteDate())
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)
diff --git a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
index c3b861d..a796171 100644
--- a/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
+++ b/app/src/main/java/com/casic/br/view/ConnectDeviceActivity.kt
@@ -28,7 +28,7 @@
class ConnectDeviceActivity : KotlinBaseActivity() {
- private val kTag = "ResetDeviceActivity"
+ private val kTag = "ConnectDeviceActivity"
private lateinit var params: ArrayList
private lateinit var deviceViewModel: DeviceViewModel
diff --git a/app/src/main/java/com/casic/br/view/LoginActivity.kt b/app/src/main/java/com/casic/br/view/LoginActivity.kt
index 6f4088a..0d4c255 100644
--- a/app/src/main/java/com/casic/br/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/br/view/LoginActivity.kt
@@ -95,12 +95,12 @@
userViewModel.enter(keyModel.data!!.sid!!, userPhone, dataByPublicKey)
userViewModel.loginResult.observe(this, {
if (it.code == 200) {
+ AuthenticationHelper.saveToken(it.data!!.token!!)
userViewModel.obtainUserDetail(userPhone)
userViewModel.userDetailResult.observe(this, { user ->
if (user.code == 200) {
SaveKeyValues.putValue(LocaleConstant.USER_IS_LOGIN, true)
SaveKeyValues.putValue(LocaleConstant.USER_MODEL, user.toJson())
- AuthenticationHelper.saveToken(it.data!!.token!!)
LoadingDialogHub.dismiss()
PageNavigationManager.finishAllActivity()
navigatePageTo()
diff --git a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
index 4375725..6014293 100644
--- a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
@@ -1,25 +1,205 @@
package com.casic.br.view
+import android.util.Log
+import android.view.KeyEvent
+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.casic.br.widgets.WaterRippleView
+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.android.ble.api.LeScanSetting
+import com.tuya.smart.android.ble.api.ScanDeviceBean
+import com.tuya.smart.android.ble.api.ScanType
+import com.tuya.smart.android.ble.api.TyBleScanResponse
+import com.tuya.smart.home.sdk.TuyaHomeSdk
+import com.tuya.smart.home.sdk.bean.ConfigProductInfoBean
+import com.tuya.smart.sdk.api.IMultiModeActivatorListener
+import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
+import com.tuya.smart.sdk.api.ITuyaDataCallback
+import com.tuya.smart.sdk.bean.DeviceBean
+import com.tuya.smart.sdk.bean.MultiModeActivatorBean
+import kotlinx.android.synthetic.main.activity_select_bluetooth.*
+import kotlinx.android.synthetic.main.activity_select_wifi.rootView
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.*
+import kotlinx.android.synthetic.main.fragment_add_device_nearby.waterRippleView
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
class SelectBluetoothActivity : KotlinBaseActivity() {
- override fun initLayoutView(): Int = R.layout.activity_select_wifi
+ private val kTag = "SelectBluetoothActivity"
+ private val context = this@SelectBluetoothActivity
+ private var isRunning = true
+ private lateinit var singleThreadExecutor: ExecutorService
+ private lateinit var params: ArrayList
+ private lateinit var deviceViewModel: DeviceViewModel
+ private var deviceBean: ScanDeviceBean? = null
- override fun observeRequestState() {
-
- }
+ override fun initLayoutView(): Int = R.layout.activity_select_bluetooth
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "搜索蓝牙设备"
}
override fun initData() {
+ //只有一个核心线程,当被占用时,其他的任务需要进入队列等待
+ singleThreadExecutor = Executors.newSingleThreadExecutor()
+ waterRippleView.setOnAnimationStartListener(object :
+ WaterRippleView.OnAnimationStartListener {
+ override fun onStart(view: WaterRippleView?) {
+ view?.start()
+ //开启线程搜索设备
+ Log.d(kTag, "onStart: 开始线程")
+ singleThreadExecutor.execute(searchRunnable)
+ isRunning = true
+ }
+ })
+ params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+ deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
+
+ val scanSetting = LeScanSetting.Builder().apply {
+ setTimeout(60000)
+ addScanType(ScanType.SINGLE)
+ }.build()
+ TuyaHomeSdk.getBleOperator().startLeScan(scanSetting, object : TyBleScanResponse {
+ override fun onResult(bean: ScanDeviceBean?) {
+ if (bean == null) {
+ Log.e(kTag, "onResult: 无法扫描到涂鸦蓝牙模组")
+ return
+ }
+ deviceBean = bean
+ TuyaHomeSdk.getActivatorInstance().getActivatorDeviceInfo(
+ deviceBean!!.productId, deviceBean!!.uuid, deviceBean!!.mac,
+ object : ITuyaDataCallback {
+ override fun onSuccess(result: ConfigProductInfoBean?) {
+ if (result == null) {
+ Log.e(kTag, "onResult: 无法获取涂鸦设备信息")
+ return
+ }
+ tipsView.text = "已搜索到蓝牙设备,基本信息如下"
+ deviceAddressView.text = String.format("设备地址:${deviceBean!!.address}")
+ deviceNameView.text = String.format("产品名称:${result.name}")
+ }
+
+ override fun onError(errorCode: String?, errorMessage: String?) {
+
+ }
+ })
+ }
+ })
+ }
+
+ private val searchRunnable = Runnable {
+ while (true) {
+ try {
+ if (!isRunning) {
+ Log.d(kTag, "run: 设备搜索线程休眠中...")
+ Thread.sleep(Long.MAX_VALUE)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ Log.d(kTag, "run: 设备搜索线程运行中...")
+ try {
+ //搜索设备
+ Thread.sleep(1000)
+ } catch (e: InterruptedException) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ override fun onPause() {
+ super.onPause()
+ isRunning = false
+ waterRippleView.stop()
+ TuyaHomeSdk.getBleOperator().stopLeScan()
}
override fun initEvent() {
+ nextStepButton.setOnClickListener {
+ LoadingDialogHub.show(this, "设备配网中,请稍后")
+ val userModel = DeserializeModel.getUserModel()!!
+ val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
+ TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(), object :
+ ITuyaActivatorGetToken {
+ override fun onSuccess(token: String?) {
+ val multiModeActivatorBean = MultiModeActivatorBean()
+ multiModeActivatorBean.homeId = homeId.toLong()
+ multiModeActivatorBean.deviceType = deviceBean!!.deviceType
+ multiModeActivatorBean.uuid = deviceBean!!.uuid
+ multiModeActivatorBean.address = deviceBean!!.address
+ multiModeActivatorBean.mac = deviceBean!!.mac
+ multiModeActivatorBean.ssid = params[0]
+ multiModeActivatorBean.pwd = params[1]
+ multiModeActivatorBean.token = token
+ multiModeActivatorBean.timeout = 120000
+
+ // 开始配网
+ TuyaHomeSdk.getActivator().newMultiModeActivator().startActivator(
+ multiModeActivatorBean,
+ object : IMultiModeActivatorListener {
+ override fun onSuccess(deviceBean: DeviceBean?) {
+ //将绑定的设备存入自己的数据库
+ deviceViewModel.addDevice(deviceBean!!, userModel)
+ }
+
+ override fun onFailure(code: Int, msg: String?, handle: Any?) {
+ Log.d(kTag, "errorMsg: $msg")
+ "添加设备失败".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+
+ override fun onFailure(errorCode: String?, errorMsg: String?) {
+ "获取设备配网Token失败,无法配网".show(context)
+ LoadingDialogHub.dismiss()
+ }
+ })
+ }
+ }
+
+ override fun observeRequestState() {
+ deviceViewModel.loadState.observe(this, {
+ when (it) {
+ LoadState.Success -> {
+ LoadingDialogHub.dismiss()
+ navigatePageTo()
+ }
+ else -> {
+ "添加失败,请重新绑定".show(this)
+ LoadingDialogHub.dismiss()
+ }
+ }
+ })
+ }
+
+ override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (deviceBean == null) {
+ return super.onKeyDown(keyCode, event)
+ }
+ TuyaHomeSdk.getActivator().newMultiModeActivator().stopActivator(deviceBean!!.uuid)
+ }
+ return super.onKeyDown(keyCode, event)
}
}
\ 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 98778ea..0cde6b9 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -2,6 +2,7 @@
import android.content.Context
import android.content.Intent
+import android.graphics.Color
import android.net.wifi.WifiManager
import android.provider.Settings
import android.view.View
@@ -13,6 +14,7 @@
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import kotlinx.android.synthetic.main.activity_login.*
import kotlinx.android.synthetic.main.activity_select_wifi.*
import kotlinx.android.synthetic.main.include_base_title.*
@@ -23,8 +25,6 @@
class SelectWiFiActivity : KotlinBaseActivity() {
- private val context: Context = this@SelectWiFiActivity
- private val kTag = "SelectWifiActivity"
private val wifi by lazy { applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager }
override fun initLayoutView(): Int = R.layout.activity_select_wifi
@@ -62,7 +62,20 @@
}
//保存Wi-Fi密码
SaveKeyValues.putValue(LocaleConstant.WIFI_PASSWORD, wifiKey)
- navigatePageTo(arrayListOf(wifiName, wifiKey))
+ val wifiConfig = arrayListOf(wifiName, wifiKey)
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(arrayListOf("Wi-Fi连接模式", "蓝牙连接模式"))
+ .setItemTextColor(Color.BLUE)
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> navigatePageTo(wifiConfig)
+ 1 -> navigatePageTo(wifiConfig)
+ }
+ }
+ })
+ .build().show()
}
}
diff --git a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt
index 05fe059..c81e688 100644
--- a/app/src/main/java/com/casic/br/vm/MessageViewModel.kt
+++ b/app/src/main/java/com/casic/br/vm/MessageViewModel.kt
@@ -31,8 +31,6 @@
listModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
- } else {
- response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
it.printStackTrace()
diff --git a/app/src/main/res/layout/activity_select_bluetooth.xml b/app/src/main/res/layout/activity_select_bluetooth.xml
new file mode 100644
index 0000000..8a2e3b3
--- /dev/null
+++ b/app/src/main/res/layout/activity_select_bluetooth.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_select_wifi.xml b/app/src/main/res/layout/activity_select_wifi.xml
index b1f33e2..a86f303 100644
--- a/app/src/main/res/layout/activity_select_wifi.xml
+++ b/app/src/main/res/layout/activity_select_wifi.xml
@@ -36,7 +36,6 @@