package com.casic.smarttube.view import android.graphics.Color import android.util.Log import android.view.View import androidx.lifecycle.ViewModelProvider 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.utils.DialogManager 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.* import kotlinx.android.synthetic.main.include_base_title.* class DeviceDetailActivity : KotlinBaseActivity() { private val kTag = "DeviceDetailActivity" private lateinit var dialogManager: DialogManager private lateinit var deviceViewModel: DeviceViewModel 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) dialogManager = DialogManager.obtainInstance(this) deviceViewModel.obtainDeviceDetail(params[0], params[1]) deviceViewModel.deviceDetailModel.observe(this, { if (it.code == 200) { val device = it.data 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()) } } urls.forEach { url -> Log.d(kTag, url) } val imageAdapter = ReadOnlyImageAdapter(this) imageAdapter.setImageList(urls) imageGridView.adapter = imageAdapter imageGridView.setOnItemClickListener { _, _, position, _ -> if (urls[position].isEmpty()) { "图片加载失败,无法查看大图".show(this) } else { navigatePageTo<BigImageActivity>(position, urls) } } } densityView.text = device.stregnth lastDataView.text = device.uptime if (device.onlineState == "0") { deviceStateView.text = "离线" deviceStateView.setTextColor(Color.RED) } else { deviceStateView.text = "在线" deviceStateView.setTextColor(Color.GREEN) } deviceRsrpView.text = device.rsrp deviceBatteryView.text = device.cell } }) deviceViewModel.loadState.observe(this, { when (it) { LoadState.Loading -> dialogManager.showLoadingDialog("数据加载中...") else -> dialogManager.dismissLoadingDialog() } }) } override fun initEvent() { } }