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