Newer
Older
SmartKitchenTablet / 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.amap.api.location.AMapLocation
import com.casic.br.R
import com.casic.br.base.BaseApplication
import com.casic.br.extensions.initLayoutImmersionBar
import com.casic.br.utils.DeserializeModel
import com.casic.br.utils.LoadingDialogHub
import com.casic.br.utils.LocationHelper
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.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 = "ConnectDeviceActivity"
    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 userModel = DeserializeModel.getUserModel()!!
            LocationHelper.obtainCurrentLocation(this, object : LocationHelper.ILocationListener {
                override fun onAMapLocationGet(aMapLocation: AMapLocation?) {
                    if (aMapLocation == null) {
                        "信号弱,添加设备失败".show(BaseApplication.obtainInstance())
                        LoadingDialogHub.dismiss()
                        return
                    }
                    TuyaHomeSdk.getActivatorInstance()
                        .getActivatorToken(DeserializeModel.getHomeId(),
                            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,
                                                    "1",
                                                    aMapLocation
                                                )
                                            }

                                            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()
                }
            }
        })
    }
}