Newer
Older
SmartKitchen / app / src / main / java / com / casic / br / view / ConnectDeviceActivity.kt
package com.casic.br.view

import android.util.Log
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.br.R
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
import com.casic.br.utils.LocaleConstant
import com.casic.br.vm.DeviceViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
import com.tuya.smart.home.sdk.TuyaHomeSdk
import com.tuya.smart.home.sdk.builder.ActivatorBuilder
import com.tuya.smart.sdk.api.ITuyaActivatorGetToken
import com.tuya.smart.sdk.api.ITuyaSmartActivatorListener
import com.tuya.smart.sdk.bean.DeviceBean
import com.tuya.smart.sdk.enums.ActivatorModelEnum
import kotlinx.android.synthetic.main.activity_connect_device.*
import kotlinx.android.synthetic.main.include_left_back_title.*
import java.util.*

class ConnectDeviceActivity : KotlinBaseActivity() {

    private val kTag = "ResetDeviceActivity"
    private lateinit var params: ArrayList<String>
    private lateinit var deviceViewModel: DeviceViewModel

    override fun initLayoutView(): Int = R.layout.activity_connect_device

    override fun setupTopBarLayout() {
        ImmersionBar.with(this).statusBarDarkFont(true).init()
        initLayoutImmersionBar(rootView)
        leftBackView.setOnClickListener { finish() }
        titleView.visibility = View.GONE
    }

    override fun initData() {
        params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
        deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java]
    }

    override fun initEvent() {
        nextStepButton.setOnClickListener {
            if (!confirmCheckBox.isChecked) {
                "请确认设备指示灯是否闪烁".show(this)
                return@setOnClickListener
            }
            LoadingDialogHub.show(this, "设备配网中,请稍后")
            val homeId = SaveKeyValues.getValue(LocaleConstant.HOME_ID, "") as String
            val userModel = DeserializeModel.getUserModel()!!
            TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId.toLong(),
                object : ITuyaActivatorGetToken {
                    override fun onSuccess(token: String) {
                        //调用 配网接口 需要提供路由器的 SSID(即 Wi-Fi 名称)、密码、从云端获取的 Token 等。
                        val builder = ActivatorBuilder().apply {
                            this.ssid = params[0]
                            this.context = this@ConnectDeviceActivity
                            this.password = params[1]
                            this.activatorModel = ActivatorModelEnum.TY_EZ
                            this.timeOut = 100
                            this.token = token
                            this.listener = object : ITuyaSmartActivatorListener {
                                override fun onError(errorCode: String?, errorMsg: String?) {
                                    Log.d(kTag, "errorMsg: $errorMsg")
                                    "添加设备超时".show(this@ConnectDeviceActivity)
                                    LoadingDialogHub.dismiss()
                                }

                                override fun onActiveSuccess(devResp: DeviceBean?) {
                                    //将绑定的设备存入自己的数据库
                                    deviceViewModel.addDevice(devResp!!,userModel)
                                }

                                override fun onStep(step: String?, data: Any?) {
                                    LoadingDialogHub.dismiss()
                                }
                            }
                        }
                        TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder).start()
                    }

                    override fun onFailure(s: String, s1: String) {
                        Log.e(kTag, "onFailure: $s")
                        LoadingDialogHub.dismiss()
                    }
                })
        }
    }

    override fun observeRequestState() {
        deviceViewModel.loadState.observe(this, {
            when (it) {
                LoadState.Success -> {
                    LoadingDialogHub.dismiss()
                    navigatePageTo<AddDeviceResultActivity>()
                }
                else -> {
                    "添加失败,请重置设备重新绑定".show(this)
                    LoadingDialogHub.dismiss()
                }
            }
        })
    }
}