package com.casic.smarttube.view import android.graphics.Color import android.view.View import androidx.lifecycle.ViewModelProvider import com.amap.api.maps.model.LatLng import com.amap.api.services.core.LatLonPoint import com.amap.api.services.geocoder.GeocodeResult import com.amap.api.services.geocoder.GeocodeSearch import com.amap.api.services.geocoder.RegeocodeQuery import com.amap.api.services.geocoder.RegeocodeResult import com.casic.smarttube.R import com.casic.smarttube.extensions.combineImagePath import com.casic.smarttube.extensions.toSignalImage import com.casic.smarttube.model.DeviceDetailModel import com.casic.smarttube.utils.LoadingDialogHub import com.casic.smarttube.utils.RouteOnMap import com.casic.smarttube.vm.DeviceViewModel import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.adapter.ReadOnlyImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.convertColor 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.ImmerseStatusBarUtil import com.pengxh.kt.lite.vm.LoadState import kotlinx.android.synthetic.main.activity_device_detail.densityView import kotlinx.android.synthetic.main.activity_device_detail.descriptionView import kotlinx.android.synthetic.main.activity_device_detail.deviceBatteryView import kotlinx.android.synthetic.main.activity_device_detail.deviceCodeView import kotlinx.android.synthetic.main.activity_device_detail.deviceNameView import kotlinx.android.synthetic.main.activity_device_detail.deviceStateView import kotlinx.android.synthetic.main.activity_device_detail.imageGridView import kotlinx.android.synthetic.main.activity_device_detail.lastDataView import kotlinx.android.synthetic.main.activity_device_detail.leftBackView import kotlinx.android.synthetic.main.activity_device_detail.locationView import kotlinx.android.synthetic.main.activity_device_detail.projectGroupView import kotlinx.android.synthetic.main.activity_device_detail.rightOptionView import kotlinx.android.synthetic.main.activity_device_detail.signalImageView import kotlinx.android.synthetic.main.activity_device_detail.titleView class DeviceDetailActivity : KotlinBaseActivity() { private val kTag = "DeviceDetailActivity" private lateinit var deviceViewModel: DeviceViewModel private lateinit var deviceModel: DeviceDetailModel.DataModel private val geocoderSearch by lazy { GeocodeSearch(this) } override fun initLayoutView(): Int = R.layout.activity_device_detail override fun setupTopBarLayout() { ImmersionBar.with(this).statusBarDarkFont(false).init() ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) titleView.text = "设备详情" leftBackView.setOnClickListener { finish() } } override fun initData() { val params = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!! deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) deviceViewModel.obtainDeviceDetail(params[0], params[1]) deviceViewModel.deviceDetailModel.observe(this) { if (it.code == 200) { val device = it.data this.deviceModel = device deviceCodeView.text = device.devcode deviceNameView.text = device.deviceName projectGroupView.text = String.format("项目${device.groupId}") if (device.latGaode.isBlank() || device.lngGaode.isBlank()) { locationView.text = "经纬度异常,无法查看具体位置" } else { val queryParam = RegeocodeQuery( LatLonPoint(device.latGaode.toDouble(), device.lngGaode.toDouble()), 200f, GeocodeSearch.AMAP ) geocoderSearch.getFromLocationAsyn(queryParam) geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener { override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { if (rCode == 1000) { locationView.text = result?.regeocodeAddress?.formatAddress } } override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { } }) } descriptionView.text = device.descn if (device.photos.toString().isBlank()) { imageGridView.visibility = View.GONE } else { imageGridView.visibility = View.VISIBLE //处理图片地址 val urls: ArrayList<String> = ArrayList() val imageArray = device.photos.toString().split(",") imageArray.forEach { path -> if (path.isNotBlank()) { urls.add(path.combineImagePath()) } } val imageAdapter = ReadOnlyImageAdapter(this) imageAdapter.setImageList(urls) imageGridView.adapter = imageAdapter imageGridView.setOnItemClickListener { _, _, position, _ -> if (urls[position].isEmpty()) { "图片加载失败,无法查看大图".show(this) } else { navigatePageTo<BigImageActivity>(position, urls) } } } val value = device.stregnth.toDouble().toInt() val level = "$value%" val ppm = "${value * 500}ppm" densityView.text = "$level(相当于$ppm)" lastDataView.text = device.uptime if (device.onlineState == "0") { deviceStateView.text = "离线" deviceStateView.setTextColor(Color.RED) } else { deviceStateView.text = "在线" deviceStateView.setTextColor(Color.GREEN) } signalImageView.setBackgroundResource(device.rsrp.toSignalImage()) deviceBatteryView.text = if (device.cell.isNullOrBlank()) { "0%" } else { device.cell + "%" } } } } override fun observeRequestState() { deviceViewModel.loadState.observe(this) { when (it) { LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") else -> LoadingDialogHub.dismiss() } } } override fun initEvent() { rightOptionView.setOnClickListener { val lat = deviceModel.latGaode.toString() val lng = deviceModel.lngGaode.toString() if (lat.isBlank() || lng.isBlank()) { "经纬度异常,无法开启导航".show(this) return@setOnClickListener } RouteOnMap.startNavigation(this, "", LatLng(lat.toDouble(), lng.toDouble())) } } }