Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / view / WellDetailActivity.kt
package com.casic.smarttube.view

import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
import com.amap.api.maps.AMapOptions
import com.amap.api.maps.CameraUpdateFactory
import com.amap.api.maps.model.BitmapDescriptorFactory
import com.amap.api.maps.model.CameraPosition
import com.amap.api.maps.model.LatLng
import com.amap.api.maps.model.MarkerOptions
import com.casic.smarttube.R
import com.casic.smarttube.utils.DialogHelper
import com.casic.smarttube.vm.AuthenticateViewModel
import com.casic.smarttube.vm.WellViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.convertColor
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_well_detail.*
import kotlinx.android.synthetic.main.include_base_title.*


class WellDetailActivity : KotlinBaseActivity(), AMap.OnMapLoadedListener {

    private lateinit var wellViewModel: WellViewModel
    private lateinit var authenticateViewModel: AuthenticateViewModel
    private lateinit var wellId: String
    private lateinit var aMap: AMap
    private var latLng: LatLng? = null


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

    override fun setupTopBarLayout() {
        ImmersionBar.with(this).statusBarDarkFont(false).init()
        ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
        leftBackView.setOnClickListener { finish() }
        titleView.text = "井详情"
    }

    override fun initData() {
        wellId = intent.getStringExtra(Constant.INTENT_PARAM)!!
        wellViewModel = ViewModelProvider(this).get(WellViewModel::class.java)
        authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)

        aMap = wellMapView.map
        aMap.mapType = AMap.MAP_TYPE_NORMAL
        val uiSettings = aMap.uiSettings
        uiSettings.isCompassEnabled = true
        uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER
        uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度
        uiSettings.isRotateGesturesEnabled = false//不允许地图旋转

        //地图加载成功之后调用
        aMap.addOnMapLoadedListener(this)
    }

    override fun onMapLoaded() {
        if (latLng == null) {
            "该闸井经纬度异常,无法在地图显示".show(this)
            return
        }
        /**
         * 参数1---要移动到的经纬度
         * 参数2---地图的放缩级别zoom
         * 参数3---地图倾斜度
         * 参数4---地图的旋转角度
         * */
        val cameraPosition = CameraPosition(latLng, 13f, 0f, 0f)
        val newCameraPosition = CameraUpdateFactory.newCameraPosition(cameraPosition)
        aMap.animateCamera(newCameraPosition, 3000, object : AMap.CancelableCallback {
            override fun onFinish() {
                //添加Marker
                val markerOptions = MarkerOptions()
                    .position(latLng)
                    .icon(BitmapDescriptorFactory.fromResource(R.mipmap.well_location))
                    .draggable(true)
                aMap.addMarker(markerOptions)
            }

            override fun onCancel() {

            }
        })
    }

    override fun initEvent() {
        wellViewModel.obtainWellDetail(wellId)
        wellViewModel.detailModel.observe(this, {
            if (it.code == 200) {
                val wellDetail = it.data!!

                wellNameView.text = wellDetail.wellName
                wellTypeView.text = wellDetail.wellTypeName
                wellCodeView.text = wellDetail.wellCode
                ownerShipView.text = wellDetail.deptName
                wellStateView.text = wellDetail.bfztName
                wellDepthView.text = wellDetail.deep.toString()
                //绑定窨井位置
                if (wellDetail.latGaode.isBlank() || wellDetail.lngGaode.isBlank()) {
                    wellLocationView.text = wellDetail.position
                    return@observe
                }
                this.latLng = LatLng(wellDetail.latGaode.toDouble(), wellDetail.lngGaode.toDouble())
                authenticateViewModel.obtainAreaByDept(wellDetail.deptid)
                authenticateViewModel.areaModel.observe(this, { areaModel ->
                    if (areaModel.code == 200) {
                        authenticateViewModel.obtainDistrict(areaModel.data.area)
                    }
                })
                authenticateViewModel.districtModel.observe(this, { districtModel ->
                    if (districtModel.code == 200) {
                        districtModel.data.forEach { area ->
                            if (area.id == wellDetail.qu) {
                                authenticateViewModel.obtainStreet(area.id)
                                authenticateViewModel.streetModel.observe(this, { street ->
                                    if (street.code == 200) {
                                        street.data.forEach { streetData ->
                                            if (streetData.id == wellDetail.area) {
                                                wellLocationView.text =
                                                    String.format("${area.name}${streetData.name}-${wellDetail.position}")
                                            }
                                        }
                                    }
                                })
                            }
                        }
                    }
                })
            }
        })
        wellViewModel.loadState.observe(this, {
            when (it) {
                is LoadState.Loading -> {
                    DialogHelper.showLoadingDialog(this, "数据加载中,请稍后")
                }
                else -> {
                    DialogHelper.dismissLoadingDialog()
                }
            }
        })
    }

    /**地图相关*********/
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        wellMapView.onCreate(savedInstanceState)
    }

    override fun onResume() {
        super.onResume()
        wellMapView.onResume()
    }

    override fun onPause() {
        super.onPause()
        wellMapView.onPause()
    }

    override fun onDestroy() {
        wellMapView.onDestroy()
        super.onDestroy()
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        wellMapView.onSaveInstanceState(outState)
    }
}