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.*
import com.casic.smarttube.R
import com.casic.smarttube.utils.LoadingDialogHub
import com.casic.smarttube.utils.RouteOnMap
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 com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_well_detail.*
import kotlinx.android.synthetic.main.include_base_title.*


class WellDetailActivity : KotlinBaseActivity(), AMap.OnMarkerClickListener {

    private lateinit var wellViewModel: WellViewModel
    private lateinit var authenticateViewModel: AuthenticateViewModel
    private lateinit var aMap: AMap

    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() {
        val wellId = intent.getStringExtra(Constant.INTENT_PARAM)!!
        wellViewModel = ViewModelProvider(this).get(WellViewModel::class.java)
        authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java)
        wellViewModel.obtainWellDetail(wellId)

        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//不允许地图旋转

        // marker 点击事件监听
        aMap.addOnMarkerClickListener(this)
    }

    override fun onMarkerClick(marker: Marker?): Boolean {
        if (marker != null) {
            AlertControlDialog.Builder()
                .setContext(this)
                .setTitle("操作提示")
                .setMessage("确定要前往吗")
                .setNegativeButton("取消")
                .setPositiveButton("确定")
                .setOnDialogButtonClickListener(object :
                    AlertControlDialog.OnDialogButtonClickListener {
                    override fun onConfirmClick() {
                        val latLng = marker.position
                        val lat = latLng.latitude.toString()
                        val lng = latLng.longitude.toString()
                        if (lat.isBlank() || lng.isBlank()) {
                            "窨井经纬度异常,无法开启导航".show(this@WellDetailActivity)
                            return
                        }
                        RouteOnMap.startNavigation(
                            this@WellDetailActivity,
                            marker.snippet,
                            LatLng(lat.toDouble(), lng.toDouble())
                        )
                    }

                    override fun onCancelClick() {

                    }
                }).build().show()
        }
        return true
    }

    override fun initEvent() {
        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
                //绑定窨井位置
                if (wellDetail.latGaode.isBlank() || wellDetail.lngGaode.isBlank()) {
                    wellLocationView.text = wellDetail.position
                    return@observe
                }
                val latLng = LatLng(wellDetail.latGaode.toDouble(), wellDetail.lngGaode.toDouble())
                val cameraPosition = CameraPosition(latLng, 10f, 0f, 0f)
                val newCameraPosition = CameraUpdateFactory.newCameraPosition(cameraPosition)
                aMap.animateCamera(newCameraPosition, 1500, object : AMap.CancelableCallback {
                    override fun onFinish() {
                        //添加Marker
                        val markerOptions = MarkerOptions()
                            .snippet(wellDetail.position)
                            .position(latLng)
                            .icon(BitmapDescriptorFactory.fromResource(R.mipmap.well_location))
                            .draggable(true)
                        aMap.addMarker(markerOptions)
                    }

                    override fun onCancel() {

                    }
                })

                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) {
                LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...")
                else -> LoadingDialogHub.dismiss()
            }
        })
    }

    /**地图相关*********/
    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)
    }
}