diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3afcc05..df6e1a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,7 +54,7 @@
-
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3afcc05..df6e1a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,7 +54,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/view/AddressActivity.kt b/app/src/main/java/com/casic/br/view/AddressActivity.kt
index 5c47a8f..3c1c44e 100644
--- a/app/src/main/java/com/casic/br/view/AddressActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddressActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.graphics.Color
import androidx.lifecycle.ViewModelProvider
import com.casic.br.R
import com.casic.br.utils.DeserializeModel
@@ -69,7 +70,7 @@
val layout = addressPicker.wheelLayout
layout.setTextSize(14f.sp2px(this).toFloat())
layout.setSelectedTextSize(16f.sp2px(this).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setOnLinkageSelectedListener { first, second, third ->
addressPicker.titleView.text = String.format(
@@ -78,7 +79,7 @@
addressPicker.secondWheelView.formatItem(second),
addressPicker.thirdWheelView.formatItem(third)
)
- addressPicker.titleView.setTextColor(R.color.mainThemeColor.convertColor(this))
+ addressPicker.titleView.setTextColor(Color.BLUE)
}
addressPicker.show()
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3afcc05..df6e1a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,7 +54,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/view/AddressActivity.kt b/app/src/main/java/com/casic/br/view/AddressActivity.kt
index 5c47a8f..3c1c44e 100644
--- a/app/src/main/java/com/casic/br/view/AddressActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddressActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.graphics.Color
import androidx.lifecycle.ViewModelProvider
import com.casic.br.R
import com.casic.br.utils.DeserializeModel
@@ -69,7 +70,7 @@
val layout = addressPicker.wheelLayout
layout.setTextSize(14f.sp2px(this).toFloat())
layout.setSelectedTextSize(16f.sp2px(this).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setOnLinkageSelectedListener { first, second, third ->
addressPicker.titleView.text = String.format(
@@ -78,7 +79,7 @@
addressPicker.secondWheelView.formatItem(second),
addressPicker.thirdWheelView.formatItem(third)
)
- addressPicker.titleView.setTextColor(R.color.mainThemeColor.convertColor(this))
+ addressPicker.titleView.setTextColor(Color.BLUE)
}
addressPicker.show()
}
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 6cd793e..a64fdde 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -222,7 +222,7 @@
val birthdayPicker = BirthdayPicker(this)
birthdayPicker.setDefaultValue(1991, 8, 3)
birthdayPicker.setOnDatePickedListener { year, month, day ->
- val birthdayDate = String.format("%s年%s月%s日", year, month, day)
+ val birthdayDate = String.format("%s-%s-%s", year, month, day)
//更新生日
currentUser.birthday = birthdayDate
userViewModel.updateUserInfo(currentUser)
@@ -232,7 +232,7 @@
val layout = birthdayPicker.wheelLayout
layout.setTextSize(14f.sp2px(context).toFloat())
layout.setSelectedTextSize(16f.sp2px(context).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setResetWhenLinkage(false)
birthdayPicker.show()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3afcc05..df6e1a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,7 +54,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/view/AddressActivity.kt b/app/src/main/java/com/casic/br/view/AddressActivity.kt
index 5c47a8f..3c1c44e 100644
--- a/app/src/main/java/com/casic/br/view/AddressActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddressActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.graphics.Color
import androidx.lifecycle.ViewModelProvider
import com.casic.br.R
import com.casic.br.utils.DeserializeModel
@@ -69,7 +70,7 @@
val layout = addressPicker.wheelLayout
layout.setTextSize(14f.sp2px(this).toFloat())
layout.setSelectedTextSize(16f.sp2px(this).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setOnLinkageSelectedListener { first, second, third ->
addressPicker.titleView.text = String.format(
@@ -78,7 +79,7 @@
addressPicker.secondWheelView.formatItem(second),
addressPicker.thirdWheelView.formatItem(third)
)
- addressPicker.titleView.setTextColor(R.color.mainThemeColor.convertColor(this))
+ addressPicker.titleView.setTextColor(Color.BLUE)
}
addressPicker.show()
}
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 6cd793e..a64fdde 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -222,7 +222,7 @@
val birthdayPicker = BirthdayPicker(this)
birthdayPicker.setDefaultValue(1991, 8, 3)
birthdayPicker.setOnDatePickedListener { year, month, day ->
- val birthdayDate = String.format("%s年%s月%s日", year, month, day)
+ val birthdayDate = String.format("%s-%s-%s", year, month, day)
//更新生日
currentUser.birthday = birthdayDate
userViewModel.updateUserInfo(currentUser)
@@ -232,7 +232,7 @@
val layout = birthdayPicker.wheelLayout
layout.setTextSize(14f.sp2px(context).toFloat())
layout.setSelectedTextSize(16f.sp2px(context).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setResetWhenLinkage(false)
birthdayPicker.show()
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
new file mode 100644
index 0000000..b5f86e8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -0,0 +1,202 @@
+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_scan_bluetooth.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
+
+class ScanBluetoothActivity : KotlinBaseActivity() {
+
+ private val kTag = "ScanBluetoothActivity"
+ private val context = this@ScanBluetoothActivity
+ 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 initLayoutView(): Int = R.layout.activity_scan_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 3afcc05..df6e1a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,7 +54,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/view/AddressActivity.kt b/app/src/main/java/com/casic/br/view/AddressActivity.kt
index 5c47a8f..3c1c44e 100644
--- a/app/src/main/java/com/casic/br/view/AddressActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddressActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.graphics.Color
import androidx.lifecycle.ViewModelProvider
import com.casic.br.R
import com.casic.br.utils.DeserializeModel
@@ -69,7 +70,7 @@
val layout = addressPicker.wheelLayout
layout.setTextSize(14f.sp2px(this).toFloat())
layout.setSelectedTextSize(16f.sp2px(this).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setOnLinkageSelectedListener { first, second, third ->
addressPicker.titleView.text = String.format(
@@ -78,7 +79,7 @@
addressPicker.secondWheelView.formatItem(second),
addressPicker.thirdWheelView.formatItem(third)
)
- addressPicker.titleView.setTextColor(R.color.mainThemeColor.convertColor(this))
+ addressPicker.titleView.setTextColor(Color.BLUE)
}
addressPicker.show()
}
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 6cd793e..a64fdde 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -222,7 +222,7 @@
val birthdayPicker = BirthdayPicker(this)
birthdayPicker.setDefaultValue(1991, 8, 3)
birthdayPicker.setOnDatePickedListener { year, month, day ->
- val birthdayDate = String.format("%s年%s月%s日", year, month, day)
+ val birthdayDate = String.format("%s-%s-%s", year, month, day)
//更新生日
currentUser.birthday = birthdayDate
userViewModel.updateUserInfo(currentUser)
@@ -232,7 +232,7 @@
val layout = birthdayPicker.wheelLayout
layout.setTextSize(14f.sp2px(context).toFloat())
layout.setSelectedTextSize(16f.sp2px(context).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setResetWhenLinkage(false)
birthdayPicker.show()
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
new file mode 100644
index 0000000..b5f86e8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -0,0 +1,202 @@
+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_scan_bluetooth.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
+
+class ScanBluetoothActivity : KotlinBaseActivity() {
+
+ private val kTag = "ScanBluetoothActivity"
+ private val context = this@ScanBluetoothActivity
+ 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 initLayoutView(): Int = R.layout.activity_scan_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/SelectBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
deleted file mode 100644
index 6014293..0000000
--- a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
+++ /dev/null
@@ -1,205 +0,0 @@
-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() {
-
- 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 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 3afcc05..df6e1a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,7 +54,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/view/AddressActivity.kt b/app/src/main/java/com/casic/br/view/AddressActivity.kt
index 5c47a8f..3c1c44e 100644
--- a/app/src/main/java/com/casic/br/view/AddressActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddressActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.graphics.Color
import androidx.lifecycle.ViewModelProvider
import com.casic.br.R
import com.casic.br.utils.DeserializeModel
@@ -69,7 +70,7 @@
val layout = addressPicker.wheelLayout
layout.setTextSize(14f.sp2px(this).toFloat())
layout.setSelectedTextSize(16f.sp2px(this).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setOnLinkageSelectedListener { first, second, third ->
addressPicker.titleView.text = String.format(
@@ -78,7 +79,7 @@
addressPicker.secondWheelView.formatItem(second),
addressPicker.thirdWheelView.formatItem(third)
)
- addressPicker.titleView.setTextColor(R.color.mainThemeColor.convertColor(this))
+ addressPicker.titleView.setTextColor(Color.BLUE)
}
addressPicker.show()
}
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 6cd793e..a64fdde 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -222,7 +222,7 @@
val birthdayPicker = BirthdayPicker(this)
birthdayPicker.setDefaultValue(1991, 8, 3)
birthdayPicker.setOnDatePickedListener { year, month, day ->
- val birthdayDate = String.format("%s年%s月%s日", year, month, day)
+ val birthdayDate = String.format("%s-%s-%s", year, month, day)
//更新生日
currentUser.birthday = birthdayDate
userViewModel.updateUserInfo(currentUser)
@@ -232,7 +232,7 @@
val layout = birthdayPicker.wheelLayout
layout.setTextSize(14f.sp2px(context).toFloat())
layout.setSelectedTextSize(16f.sp2px(context).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setResetWhenLinkage(false)
birthdayPicker.show()
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
new file mode 100644
index 0000000..b5f86e8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -0,0 +1,202 @@
+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_scan_bluetooth.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
+
+class ScanBluetoothActivity : KotlinBaseActivity() {
+
+ private val kTag = "ScanBluetoothActivity"
+ private val context = this@ScanBluetoothActivity
+ 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 initLayoutView(): Int = R.layout.activity_scan_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/SelectBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
deleted file mode 100644
index 6014293..0000000
--- a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
+++ /dev/null
@@ -1,205 +0,0 @@
-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() {
-
- 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 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 0cde6b9..c9e732d 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -71,7 +71,7 @@
override fun onActionItemClick(position: Int) {
when (position) {
0 -> navigatePageTo(wifiConfig)
- 1 -> navigatePageTo(wifiConfig)
+ 1 -> navigatePageTo(wifiConfig)
}
}
})
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3afcc05..df6e1a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,7 +54,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/view/AddressActivity.kt b/app/src/main/java/com/casic/br/view/AddressActivity.kt
index 5c47a8f..3c1c44e 100644
--- a/app/src/main/java/com/casic/br/view/AddressActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddressActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.graphics.Color
import androidx.lifecycle.ViewModelProvider
import com.casic.br.R
import com.casic.br.utils.DeserializeModel
@@ -69,7 +70,7 @@
val layout = addressPicker.wheelLayout
layout.setTextSize(14f.sp2px(this).toFloat())
layout.setSelectedTextSize(16f.sp2px(this).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setOnLinkageSelectedListener { first, second, third ->
addressPicker.titleView.text = String.format(
@@ -78,7 +79,7 @@
addressPicker.secondWheelView.formatItem(second),
addressPicker.thirdWheelView.formatItem(third)
)
- addressPicker.titleView.setTextColor(R.color.mainThemeColor.convertColor(this))
+ addressPicker.titleView.setTextColor(Color.BLUE)
}
addressPicker.show()
}
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 6cd793e..a64fdde 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -222,7 +222,7 @@
val birthdayPicker = BirthdayPicker(this)
birthdayPicker.setDefaultValue(1991, 8, 3)
birthdayPicker.setOnDatePickedListener { year, month, day ->
- val birthdayDate = String.format("%s年%s月%s日", year, month, day)
+ val birthdayDate = String.format("%s-%s-%s", year, month, day)
//更新生日
currentUser.birthday = birthdayDate
userViewModel.updateUserInfo(currentUser)
@@ -232,7 +232,7 @@
val layout = birthdayPicker.wheelLayout
layout.setTextSize(14f.sp2px(context).toFloat())
layout.setSelectedTextSize(16f.sp2px(context).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setResetWhenLinkage(false)
birthdayPicker.show()
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
new file mode 100644
index 0000000..b5f86e8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -0,0 +1,202 @@
+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_scan_bluetooth.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
+
+class ScanBluetoothActivity : KotlinBaseActivity() {
+
+ private val kTag = "ScanBluetoothActivity"
+ private val context = this@ScanBluetoothActivity
+ 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 initLayoutView(): Int = R.layout.activity_scan_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/SelectBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
deleted file mode 100644
index 6014293..0000000
--- a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
+++ /dev/null
@@ -1,205 +0,0 @@
-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() {
-
- 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 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 0cde6b9..c9e732d 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -71,7 +71,7 @@
override fun onActionItemClick(position: Int) {
when (position) {
0 -> navigatePageTo(wifiConfig)
- 1 -> navigatePageTo(wifiConfig)
+ 1 -> navigatePageTo(wifiConfig)
}
}
})
diff --git a/app/src/main/res/layout/activity_scan_bluetooth.xml b/app/src/main/res/layout/activity_scan_bluetooth.xml
new file mode 100644
index 0000000..8a2e3b3
--- /dev/null
+++ b/app/src/main/res/layout/activity_scan_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 3afcc05..df6e1a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -54,7 +54,7 @@
-
+
diff --git a/app/src/main/java/com/casic/br/view/AddressActivity.kt b/app/src/main/java/com/casic/br/view/AddressActivity.kt
index 5c47a8f..3c1c44e 100644
--- a/app/src/main/java/com/casic/br/view/AddressActivity.kt
+++ b/app/src/main/java/com/casic/br/view/AddressActivity.kt
@@ -1,5 +1,6 @@
package com.casic.br.view
+import android.graphics.Color
import androidx.lifecycle.ViewModelProvider
import com.casic.br.R
import com.casic.br.utils.DeserializeModel
@@ -69,7 +70,7 @@
val layout = addressPicker.wheelLayout
layout.setTextSize(14f.sp2px(this).toFloat())
layout.setSelectedTextSize(16f.sp2px(this).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setOnLinkageSelectedListener { first, second, third ->
addressPicker.titleView.text = String.format(
@@ -78,7 +79,7 @@
addressPicker.secondWheelView.formatItem(second),
addressPicker.thirdWheelView.formatItem(third)
)
- addressPicker.titleView.setTextColor(R.color.mainThemeColor.convertColor(this))
+ addressPicker.titleView.setTextColor(Color.BLUE)
}
addressPicker.show()
}
diff --git a/app/src/main/java/com/casic/br/view/EditUserActivity.kt b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
index 6cd793e..a64fdde 100644
--- a/app/src/main/java/com/casic/br/view/EditUserActivity.kt
+++ b/app/src/main/java/com/casic/br/view/EditUserActivity.kt
@@ -222,7 +222,7 @@
val birthdayPicker = BirthdayPicker(this)
birthdayPicker.setDefaultValue(1991, 8, 3)
birthdayPicker.setOnDatePickedListener { year, month, day ->
- val birthdayDate = String.format("%s年%s月%s日", year, month, day)
+ val birthdayDate = String.format("%s-%s-%s", year, month, day)
//更新生日
currentUser.birthday = birthdayDate
userViewModel.updateUserInfo(currentUser)
@@ -232,7 +232,7 @@
val layout = birthdayPicker.wheelLayout
layout.setTextSize(14f.sp2px(context).toFloat())
layout.setSelectedTextSize(16f.sp2px(context).toFloat())
- layout.setSelectedTextColor(R.color.mainThemeColor.convertColor(this))
+ layout.setSelectedTextColor(Color.BLUE)
layout.setSelectedTextBold(true)
layout.setResetWhenLinkage(false)
birthdayPicker.show()
diff --git a/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
new file mode 100644
index 0000000..b5f86e8
--- /dev/null
+++ b/app/src/main/java/com/casic/br/view/ScanBluetoothActivity.kt
@@ -0,0 +1,202 @@
+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_scan_bluetooth.*
+import kotlinx.android.synthetic.main.include_base_title.*
+import java.util.*
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+
+
+class ScanBluetoothActivity : KotlinBaseActivity() {
+
+ private val kTag = "ScanBluetoothActivity"
+ private val context = this@ScanBluetoothActivity
+ 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 initLayoutView(): Int = R.layout.activity_scan_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/SelectBluetoothActivity.kt b/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
deleted file mode 100644
index 6014293..0000000
--- a/app/src/main/java/com/casic/br/view/SelectBluetoothActivity.kt
+++ /dev/null
@@ -1,205 +0,0 @@
-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() {
-
- 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 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 0cde6b9..c9e732d 100644
--- a/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
+++ b/app/src/main/java/com/casic/br/view/SelectWiFiActivity.kt
@@ -71,7 +71,7 @@
override fun onActionItemClick(position: Int) {
when (position) {
0 -> navigatePageTo(wifiConfig)
- 1 -> navigatePageTo(wifiConfig)
+ 1 -> navigatePageTo(wifiConfig)
}
}
})
diff --git a/app/src/main/res/layout/activity_scan_bluetooth.xml b/app/src/main/res/layout/activity_scan_bluetooth.xml
new file mode 100644
index 0000000..8a2e3b3
--- /dev/null
+++ b/app/src/main/res/layout/activity_scan_bluetooth.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_select_bluetooth.xml b/app/src/main/res/layout/activity_select_bluetooth.xml
deleted file mode 100644
index 8a2e3b3..0000000
--- a/app/src/main/res/layout/activity_select_bluetooth.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file