fix: 增加omdb图层管理

This commit is contained in:
2023-05-05 14:02:32 +08:00
81 changed files with 605 additions and 153 deletions

View File

@@ -2,6 +2,7 @@ package com.navinfo.omqs.ui.activity.login
import android.content.Intent
import android.os.Bundle
import android.util.DisplayMetrics
import android.util.Log
import android.widget.Toast
import androidx.activity.viewModels
@@ -33,8 +34,35 @@ class LoginActivity : CheckPermissionsActivity() {
binding.lifecycleOwner = this
binding.activity = this
initView()
Log.e("jingo", getScreenParams())
}
private fun getScreenParams(): String {
val dm = DisplayMetrics();
windowManager.defaultDisplay.getMetrics(dm);
val heightPixels = dm.heightPixels;//高的像素
val widthPixels = dm.widthPixels;//宽的像素
val densityDpi = dm.densityDpi;//dpi
val xdpi = dm.xdpi;//xdpi
val ydpi = dm.ydpi;//ydpi
val density = dm.density;//density=dpi/160,密度比
val scaledDensity = dm.scaledDensity;//scaledDensity=dpi/160 字体缩放密度比
val heightDP = heightPixels / density;//高度的dp
val widthDP = widthPixels / density;//宽度的dp
var str = "heightPixels: " + heightPixels + "px";
str += "\nwidthPixels: " + widthPixels + "px";
str += "\ndensityDpi: " + densityDpi + "dpi";
str += "\nxdpi: " + xdpi + "dpi";
str += "\nydpi: " + ydpi + "dpi";
str += "\ndensity: " + density;
str += "\nscaledDensity: " + scaledDensity;
str += "\nheightDP: " + heightDP + "dp";
str += "\nwidthDP: " + widthDP + "dp";
return str;
}
/**
* 观察登录状态把Observer提出来是为了防止每次数据变化都会有新的observer创建
* 还有为了方便释放需不需要手动释放不清楚不需要释放当viewmodel观察到activity/fragment 的生命周期时会自动释放

View File

@@ -10,17 +10,24 @@ import androidx.annotation.RequiresApi
import androidx.core.view.WindowCompat
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.lifecycleScope
import androidx.navigation.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import com.blankj.utilcode.util.SPStaticUtils
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.omqs.Constant
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.databinding.ActivityMainBinding
import com.navinfo.omqs.http.offlinemapdownload.OfflineMapDownloadManager
import com.navinfo.omqs.tools.LayerConfigUtils
import com.navinfo.omqs.ui.activity.BaseActivity
import com.navinfo.omqs.util.FlowEventBus
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import com.navinfo.omqs.ui.widget.RecyclerViewSpacesItemDecoration
import org.videolan.vlc.Util
import javax.inject.Inject
/**
@@ -39,12 +46,31 @@ class MainActivity : BaseActivity() {
@Inject
lateinit var offlineMapDownloadManager: OfflineMapDownloadManager
private val signAdapter by lazy { SignAdapter() }
private val rightController by lazy {
findNavController(R.id.main_activity_right_fragment)
}
private val signAdapter by lazy {
SignAdapter { position, signBean ->
// val directions =
// EmptyFragmentDirections.emptyFragmentToEvaluationResultFragment(
// )
// rightController.navigate(directions)
rightController.currentDestination?.let {
if (it.id == R.id.EmptyFragment) {
val bundle = Bundle()
bundle.putParcelable("SignBean", signBean)
rightController.navigate(R.id.EvaluationResultFragment, bundle)
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
//初始化地图
mapController.init(
this,
@@ -53,6 +79,8 @@ class MainActivity : BaseActivity() {
Constant.MAP_PATH,
Constant.USER_DATA_PATH + "/trace.sqlite"
)
// 在mapController初始化前获取当前OMDB图层显隐
viewModel.refreshOMDBLayer(LayerConfigUtils.getLayerConfigList())
//关联生命周期
binding.lifecycleOwner = this
//给xml转递对象
@@ -63,19 +91,18 @@ class MainActivity : BaseActivity() {
binding.mainActivityVoice.setOnTouchListener(object : View.OnTouchListener {
@RequiresApi(Build.VERSION_CODES.Q)
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
Log.e("qj",event?.action.toString())
Log.e("qj", event?.action.toString())
when (event?.action) {
MotionEvent.ACTION_DOWN ->{
MotionEvent.ACTION_DOWN -> {
voiceOnTouchStart()//Do Something
Log.e("qj","voiceOnTouchStart")
Log.e("qj", "voiceOnTouchStart")
}
MotionEvent.ACTION_UP ->{
MotionEvent.ACTION_UP -> {
voiceOnTouchStop()//Do Something
Log.e("qj","voiceOnTouchStop")
Log.e("qj", "voiceOnTouchStop")
}
}
return v?.onTouchEvent(event) ?: true
}
})
@@ -86,6 +113,14 @@ class MainActivity : BaseActivity() {
}
binding.mainActivitySignRecyclerview.layoutManager = LinearLayoutManager(this)
binding.mainActivitySignRecyclerview.adapter = signAdapter
//增加4dp的间隔
binding.mainActivitySignRecyclerview.addItemDecoration(
RecyclerViewSpacesItemDecoration(
Util.convertDpToPx(
this, 4
)
)
)
viewModel.liveDataSignList.observe(this) {
signAdapter.refreshData(it)
}
@@ -93,17 +128,7 @@ class MainActivity : BaseActivity() {
lifecycleScope.launch {
// 初始化地图图层控制接收器
FlowEventBus.subscribe<List<ImportConfig>>(lifecycle, Constant.EVENT_LAYER_MANAGER_CHANGE) {
// 根据获取到的配置信息,筛选未勾选的图层名称
val omdbVisibleList = it.filter { importConfig->
importConfig.tableGroupName == "OMDB数据"
}.first().tables.filter { tableInfo ->
!tableInfo.checked
}.map {
tableInfo -> tableInfo.table
}.toList()
com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY = omdbVisibleList.toTypedArray()
// 刷新地图
mapController.mMapView.vtmMap.clearMap()
viewModel.refreshOMDBLayer(it)
}
}
}
@@ -158,14 +183,14 @@ class MainActivity : BaseActivity() {
naviController.navigate(R.id.EvaluationResultFragment)*/
}
fun voiceOnTouchStart(){
viewModel!!.startSoundMetter(this,binding.mainActivityVoice)
fun voiceOnTouchStart() {
viewModel.startSoundMetter(this, binding.mainActivityVoice)
}
@RequiresApi(Build.VERSION_CODES.Q)
fun voiceOnTouchStop(){
if(Constant.IS_VIDEO_SPEED){
viewModel!!.stopSoundMeter()
fun voiceOnTouchStop() {
if (Constant.IS_VIDEO_SPEED) {
viewModel.stopSoundMeter()
}
}

View File

@@ -21,7 +21,6 @@ import androidx.lifecycle.viewModelScope
import androidx.navigation.findNavController
import com.blankj.utilcode.util.ToastUtils
import com.navinfo.collect.library.data.dao.impl.TraceDataBase
import com.navinfo.collect.library.data.entity.NiLocation
import com.navinfo.collect.library.data.entity.RenderEntity
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.map.handler.OnQsRecordItemClickListener
@@ -30,9 +29,11 @@ import com.navinfo.collect.library.utils.GeometryToolsKt
import com.navinfo.omqs.Constant
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.ui.dialog.CommonDialog
import com.navinfo.omqs.ui.manager.TakePhotoManager
import com.navinfo.omqs.ui.widget.SignUtil
import com.navinfo.omqs.util.DateTimeUtil
import com.navinfo.omqs.util.FlowEventBus
import com.navinfo.omqs.util.SoundMeter
@@ -69,6 +70,7 @@ class MainViewModel @Inject constructor(
val liveDataSignList = MutableLiveData<List<SignBean>>()
var testPoint = GeoPoint(0, 0)
//语音窗体
private var pop: PopupWindow? = null
@@ -87,7 +89,7 @@ class MainViewModel @Inject constructor(
})
initLocation()
viewModelScope.launch {
mapController.onMapClickFlow.collect {
mapController.onMapClickFlow.collectLatest {
testPoint = it
}
}
@@ -156,9 +158,12 @@ class MainViewModel @Inject constructor(
)
signList.add(
SignBean(
iconId = R.drawable.icon_speed_limit,
iconText = element.name,
iconId = SignUtil.getSignIcon(element),
iconText = SignUtil.getSignText(element),
distance = distance.toInt(),
elementId = element.id,
linkId = linkId,
geometry = element.geometry
)
)
}
@@ -184,6 +189,9 @@ class MainViewModel @Inject constructor(
override fun onCleared() {
super.onCleared()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mapController.lineHandler.removeLine()
}
}
//点击相机按钮
@@ -226,7 +234,7 @@ class MainViewModel @Inject constructor(
fun startSoundMetter(context: Context, v: View) {
if(mSpeakMode==null){
if (mSpeakMode == null) {
mSpeakMode = SpeakMode(context as Activity?)
}
@@ -270,7 +278,8 @@ class MainViewModel @Inject constructor(
}
mSpeakMode!!.speakText("结束录音")
//获取右侧fragment容器
val naviController = (context as Activity).findNavController(R.id.main_activity_right_fragment)
val naviController =
(context as Activity).findNavController(R.id.main_activity_right_fragment)
val bundle = Bundle()
bundle.putString("filePath", filePath)
naviController.navigate(R.id.EvaluationResultFragment, bundle)
@@ -300,6 +309,24 @@ class MainViewModel @Inject constructor(
if (pop != null && pop!!.isShowing) pop!!.dismiss()
}
/**
* 刷新OMDB图层显隐
* */
fun refreshOMDBLayer(layerConfigList: List<ImportConfig>) {
// 根据获取到的配置信息,筛选未勾选的图层名称
if (layerConfigList!=null && !layerConfigList.isEmpty()) {
val omdbVisibleList = layerConfigList.filter { importConfig->
importConfig.tableGroupName == "OMDB数据"
}.first().tables.filter { tableInfo ->
!tableInfo.checked
}.map {
tableInfo -> tableInfo.table
}.toList()
com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY = omdbVisibleList.toTypedArray()
// 刷新地图
mapController.mMapView.vtmMap.clearMap()
}
}
/**
* 处理页面调转

View File

@@ -3,11 +3,13 @@ package com.navinfo.omqs.ui.activity.map
import android.view.LayoutInflater
import android.view.ViewGroup
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.databinding.AdapterSignBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder
class SignAdapter : BaseRecyclerViewAdapter<SignBean>() {
class SignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null) :
BaseRecyclerViewAdapter<SignBean>() {
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_sign
}
@@ -23,5 +25,8 @@ class SignAdapter : BaseRecyclerViewAdapter<SignBean>() {
val item = data[position]
bd.signMainIcon.background = holder.viewBinding.root.context.getDrawable(item.iconId)
bd.signMainIcon.text = item.iconText
bd.root.setOnClickListener {
itemListener?.invoke(position, item)
}
}
}

View File

@@ -1,8 +0,0 @@
package com.navinfo.omqs.ui.activity.map
data class SignBean(
//图标ID
val iconId: Int,
val distance: Int = 0,
val iconText: String = ""
)