From 01bc6ac7fccb8ae1cc02af741a9e93453e2af569 Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Wed, 26 Jul 2023 17:08:45 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=92=8C=E6=95=B0=E6=8D=AE=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=20=E5=A2=9E=E5=8A=A0=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=92=8C=E4=BD=9C=E4=B8=9A=E6=95=B0=E6=8D=AE=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../http/taskdownload/TaskDownloadManager.kt | 2 - .../omqs/ui/activity/login/LoginActivity.kt | 5 + .../omqs/ui/activity/login/LoginViewModel.kt | 131 +++++++++++++++--- .../omqs/ui/activity/map/MainViewModel.kt | 27 +++- .../ui/fragment/console/ConsoleFragment.kt | 41 ++++-- .../ui/fragment/console/ConsoleViewModel.kt | 42 ++++++ .../ui/fragment/tasklist/TaskViewModel.kt | 49 ------- app/src/main/res/layout/activity_main.xml | 4 +- app/src/main/res/layout/console_off.xml | 2 - app/src/main/res/layout/console_on.xml | 2 - 10 files changed, 217 insertions(+), 88 deletions(-) create mode 100644 app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt index 4a0a95e8..e3d31ba4 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt @@ -104,7 +104,6 @@ class TaskDownloadManager constructor( fun addTask(taskBean: TaskBean) { - Log.e("jingo", "下载线程 ${taskBean.id}") if (!scopeMap.containsKey(taskBean.id)) { scopeMap[taskBean.id] = TaskDownloadScope(this, taskBean) } @@ -114,7 +113,6 @@ class TaskDownloadManager constructor( fun observer( id: Int, lifecycleOwner: LifecycleOwner, observer: Observer ) { - Log.e("jingo", "监听线程 ${id}") if (scopeMap.containsKey(id)) { scopeMap[id]!!.observer(lifecycleOwner, observer) } diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt index 5def15d7..7d63ab7b 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginActivity.kt @@ -99,6 +99,10 @@ class LoginActivity : CheckPermissionsActivity() { LoginStatus.LOGIN_STATUS_NET_OFFLINE_MAP -> { loginDialog("检查离线地图...") } + LoginStatus.LOGIN_STATUS_NET_GET_TASK_LIST -> { + loginDialog("获取任务列表...") + } + else -> {} } } @@ -113,6 +117,7 @@ class LoginActivity : CheckPermissionsActivity() { */ private fun loginDialog(message: String) { if (loginDialog == null) { + Log.e("jingo", "登录dialog显示") loginDialog = MaterialAlertDialogBuilder( this, com.google.android.material.R.style.MaterialAlertDialog_Material3 ).setTitle("登录").setMessage(message).show() diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt index 5b2a9b32..628e0263 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt @@ -9,6 +9,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.blankj.utilcode.util.ResourceUtils +import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.omqs.Constant import com.navinfo.omqs.bean.LoginUserBean import com.navinfo.omqs.bean.SysUserBean @@ -17,6 +18,7 @@ import com.navinfo.omqs.http.DefaultResponse import com.navinfo.omqs.http.NetResult import com.navinfo.omqs.http.NetworkService import com.navinfo.omqs.tools.FileManager +import com.navinfo.omqs.util.DateTimeUtil import com.navinfo.omqs.util.NetUtils import dagger.hilt.android.lifecycle.HiltViewModel import io.realm.Realm @@ -37,6 +39,11 @@ enum class LoginStatus { */ LOGIN_STATUS_NET_OFFLINE_MAP, + /** + * 访问任务列表 + */ + LOGIN_STATUS_NET_GET_TASK_LIST, + /** * 初始化文件夹 */ @@ -108,11 +115,12 @@ class LoginViewModel @Inject constructor( val userCodeCache = sharedPreferences?.getString("userCode", null) val userRealName = sharedPreferences?.getString("userRealName", null) //增加缓存记录,不用每次连接网络登录 - if (userNameCache != null && passwordCache != null && userCodeCache != null&&userRealName!=null) { + if (userNameCache != null && passwordCache != null && userCodeCache != null && userRealName != null) { if (userNameCache == userName && passwordCache == password) { viewModelScope.launch(Dispatchers.IO) { - createUserFolder(context, userCodeCache,userRealName) - loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) + createUserFolder(context, userCodeCache, userRealName) + getOfflineCityList(context) +// loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) } return } @@ -156,6 +164,14 @@ class LoginViewModel @Inject constructor( } else { userCode = defaultUserResponse.obj?.userCode.toString() userRealName = defaultUserResponse.obj?.userName.toString() + folderInit( + context = context, + userName = userName, + password = password, + userCode = userCode, + userRealName = userRealName + ) + getOfflineCityList(context) } } else { withContext(Dispatchers.Main) { @@ -197,21 +213,13 @@ class LoginViewModel @Inject constructor( else -> {} } - //文件夹初始化 - try { - loginStatus.postValue(LoginStatus.LOGIN_STATUS_FOLDER_INIT) - sharedPreferences?.edit()?.putString("userName", userName)?.commit() - sharedPreferences?.edit()?.putString("passWord", password)?.commit() - sharedPreferences?.edit()?.putString("userCode", userCode)?.commit() - sharedPreferences?.edit()?.putString("userRealName", userRealName)?.commit() + } - createUserFolder(context, userCode,userRealName) - } catch (e: IOException) { - loginStatus.postValue(LoginStatus.LOGIN_STATUS_FOLDER_FAILURE) - } + /** + * 获取离线地图 + */ + private suspend fun getOfflineCityList(context: Context) { - //假装解压文件等 - delay(1000) loginStatus.postValue(LoginStatus.LOGIN_STATUS_NET_OFFLINE_MAP) when (val result = networkService.getOfflineMapCityList()) { is NetResult.Success -> { @@ -222,6 +230,7 @@ class LoginViewModel @Inject constructor( } roomAppDatabase.getOfflineMapDao().insertOrUpdate(result.data) } + getTaskList(context) } is NetResult.Error<*> -> { @@ -229,6 +238,7 @@ class LoginViewModel @Inject constructor( Toast.makeText(context, "${result.exception.message}", Toast.LENGTH_SHORT) .show() } + getTaskList(context) } is NetResult.Failure<*> -> { @@ -236,18 +246,101 @@ class LoginViewModel @Inject constructor( Toast.makeText(context, "${result.code}:${result.msg}", Toast.LENGTH_SHORT) .show() } + getTaskList(context) } is NetResult.Loading -> {} - else -> {} } - loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) + + } + + /** + * 获取任务列表 + */ + private suspend fun getTaskList(context: Context) { + loginStatus.postValue(LoginStatus.LOGIN_STATUS_NET_GET_TASK_LIST) + when (val result = networkService.getTaskList(Constant.USER_ID)) { + is NetResult.Success -> { + if (result.data != null) { + val realm = Realm.getDefaultInstance() + realm.executeTransaction { + result.data.obj?.let { list -> + for (index in list.indices) { + val task = list[index] + val item = realm.where(TaskBean::class.java).equalTo( + "id", task.id + ).findFirst() + if (item != null) { + task.fileSize = item.fileSize + task.status = item.status + task.currentSize = item.currentSize + task.hadLinkDvoList = item.hadLinkDvoList + //已上传后不在更新操作时间 + if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) { + //赋值时间,用于查询过滤 + task.operationTime = DateTimeUtil.getNowDate().time + } + } else { + //赋值时间,用于查询过滤 + task.operationTime = DateTimeUtil.getNowDate().time + } + realm.copyToRealmOrUpdate(task) + } + } + + } + } + loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) + } + + is NetResult.Error<*> -> { + withContext(Dispatchers.Main) { + Toast.makeText(context, "${result.exception.message}", Toast.LENGTH_SHORT) + .show() + } + loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) + } + + is NetResult.Failure<*> -> { + withContext(Dispatchers.Main) { + Toast.makeText(context, "${result.code}:${result.msg}", Toast.LENGTH_SHORT) + .show() + } + loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS) + } + + is NetResult.Loading -> {} + } + } + + /** + * 初始化文件夹 + */ + private fun folderInit( + context: Context, + userName: String, + password: String, + userCode: String, + userRealName: String + ) { + //文件夹初始化 + try { + loginStatus.postValue(LoginStatus.LOGIN_STATUS_FOLDER_INIT) + sharedPreferences?.edit()?.putString("userName", userName)?.commit() + sharedPreferences?.edit()?.putString("passWord", password)?.commit() + sharedPreferences?.edit()?.putString("userCode", userCode)?.commit() + sharedPreferences?.edit()?.putString("userRealName", userRealName)?.commit() + + createUserFolder(context, userCode, userRealName) + } catch (e: IOException) { + loginStatus.postValue(LoginStatus.LOGIN_STATUS_FOLDER_FAILURE) + } } /** * 创建用户目录 */ - private fun createUserFolder(context: Context, userId: String,userRealName:String) { + private fun createUserFolder(context: Context, userId: String, userRealName: String) { Constant.IS_VIDEO_SPEED = false Constant.USER_ID = userId Constant.USER_REAL_NAME = userRealName diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index 0120d0c1..bd112775 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -59,6 +59,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.locationtech.jts.geom.Point import org.oscim.core.GeoPoint import org.oscim.core.MapPosition import org.oscim.layers.marker.MarkerItem @@ -215,6 +216,8 @@ class MainViewModel @Inject constructor( //线选择状态 if (bSelectRoad) { captureLink(point) + } else { + captureItem(point) } } } @@ -369,7 +372,7 @@ class MainViewModel @Inject constructor( GeometryToolsKt.getTileYByGeometry(geometry.toString(), tileY) //遍历存储tile对应的x与y的值 - tileX.forEach { x -> + tileX.forEach { x -> tileY.forEach { y -> location.tilex = x location.tiley = y @@ -382,10 +385,11 @@ class MainViewModel @Inject constructor( } - location.taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1).toString() + location.taskId = + sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1).toString() //判断如果是连接状态并处于录像模式,标记为有效点 - if (shareUtil?.connectstate == true&&shareUtil?.takeCameraMode==0) { + if (shareUtil?.connectstate == true && shareUtil?.takeCameraMode == 0) { location.media = 1 } var disance = 0.0 @@ -432,6 +436,23 @@ class MainViewModel @Inject constructor( mapController.layerManagerHandler.showNiLocationLayer() } + /** + * 捕捉要素数据 + */ + private suspend fun captureItem(point: GeoPoint) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + val itemList = realmOperateHelper.queryElement( + GeometryTools.createPoint( + point.longitude, + point.latitude + ) + ) + + if(itemList.size == 1){ + + } + } + } /** * 捕获道路和面板 diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt index 3cb56387..61ba0768 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt @@ -6,8 +6,10 @@ import android.view.LayoutInflater import android.view.View import android.view.View.OnClickListener import android.view.ViewGroup +import android.widget.TextView import android.widget.Toast import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels import androidx.transition.AutoTransition import androidx.transition.Scene import androidx.transition.TransitionManager @@ -15,11 +17,8 @@ import com.navinfo.omqs.R import com.navinfo.omqs.databinding.FragmentConsoleBinding import com.navinfo.omqs.ui.activity.map.MainActivity import com.navinfo.omqs.ui.fragment.BaseFragment -import com.navinfo.omqs.ui.fragment.evaluationresult.EvaluationResultFragment import com.navinfo.omqs.ui.fragment.layermanager.LayerManagerFragment -import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapFragment import com.navinfo.omqs.ui.fragment.personalcenter.PersonalCenterFragment -import com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListFragment import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -33,6 +32,8 @@ class ConsoleFragment : BaseFragment(), OnClickListener { private var mFragment: Fragment? = null private val fragmentId = R.id.console_fragment + private val viewModel by viewModels() + // 创建a场景 private val aScene by lazy { Scene.getSceneForLayout( @@ -72,6 +73,7 @@ class ConsoleFragment : BaseFragment(), OnClickListener { override fun onTransitionEnd(transition: androidx.transition.Transition) { initOnClickListener() + initLiveData() } override fun onTransitionCancel(transition: androidx.transition.Transition) { @@ -95,6 +97,7 @@ class ConsoleFragment : BaseFragment(), OnClickListener { override fun onTransitionEnd(transition: androidx.transition.Transition) { initOnClickListener() + initLiveData() } override fun onTransitionCancel(transition: androidx.transition.Transition) { @@ -108,8 +111,26 @@ class ConsoleFragment : BaseFragment(), OnClickListener { }) initOnClickListener() + + initLiveData() } + private fun initLiveData(){ + /** + * 任务数量统计 + */ + viewModel.liveDataTaskCount.observe(viewLifecycleOwner) { + binding.consoleRoot.findViewById(R.id.console_task_count_text).text = + "共 ${it} 条" + } + /** + * 评测数据数量统计 + */ + viewModel.liveDataEvaluationResultCount.observe(viewLifecycleOwner) { + binding.consoleRoot.findViewById(R.id.console_evaluation_count_text).text = + "共 ${it} 条" + } + } /** * 设置点击事件 @@ -193,12 +214,13 @@ class ConsoleFragment : BaseFragment(), OnClickListener { R.id.console_personal_center_bg, R.id.console_personal_center_icon_bg -> { if (sceneFlag) { mFragment = PersonalCenterFragment { - if(it){ + if (it) { activity?.let { a -> - a.supportFragmentManager.beginTransaction().remove(this).commit() + a.supportFragmentManager.beginTransaction().remove(this) + .commit() (a as MainActivity).showIndoorDataLayout() } - }else{ + } else { TransitionManager.go(aScene, aTransition) } @@ -208,12 +230,13 @@ class ConsoleFragment : BaseFragment(), OnClickListener { } else { if (mFragment !is PersonalCenterFragment) { mFragment = PersonalCenterFragment { - if(it){ + if (it) { activity?.let { a -> - a.supportFragmentManager.beginTransaction().remove(this).commit() + a.supportFragmentManager.beginTransaction().remove(this) + .commit() (a as MainActivity).showIndoorDataLayout() } - }else{ + } else { TransitionManager.go(aScene, aTransition) } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt new file mode 100644 index 00000000..f4ca7e33 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt @@ -0,0 +1,42 @@ +package com.navinfo.omqs.ui.fragment.console + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.navinfo.collect.library.data.entity.QsRecordBean +import com.navinfo.collect.library.data.entity.TaskBean +import com.navinfo.omqs.tools.FileManager +import com.navinfo.omqs.util.DateTimeUtil +import dagger.hilt.android.lifecycle.HiltViewModel +import io.realm.Realm +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class ConsoleViewModel @Inject constructor() : ViewModel() { + /** + * 当前任务量统计 + */ + val liveDataTaskCount = MutableLiveData(0) + + /** + * 作业数据统计 + */ + val liveDataEvaluationResultCount = MutableLiveData(0) + + init { + viewModelScope.launch { + val realm = Realm.getDefaultInstance() + val nowTime: Long = DateTimeUtil.getNowDate().time + val beginNowTime: Long = nowTime - 90 * 3600 * 24 * 1000L + val syncUpload: Int = FileManager.Companion.FileUploadStatus.DONE + val count = + realm.where(TaskBean::class.java).notEqualTo("syncStatus", syncUpload).or() + .between("operationTime", beginNowTime, nowTime) + .equalTo("syncStatus", syncUpload).count() + liveDataTaskCount.postValue(count.toInt()) + val count2 = realm.where(QsRecordBean::class.java).count() + liveDataEvaluationResultCount.postValue(count2.toInt()) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt index e646eba1..d9fcb382 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt @@ -95,55 +95,6 @@ class TaskViewModel @Inject constructor( fun getTaskList(context: Context) { viewModelScope.launch(Dispatchers.IO) { - when (val result = networkService.getTaskList(Constant.USER_ID)) { - is NetResult.Success -> { - if (result.data != null) { - val realm = Realm.getDefaultInstance() - realm.executeTransaction { - result.data.obj?.let { list -> - for (index in list.indices) { - val task = list[index] - val item = realm.where(TaskBean::class.java).equalTo( - "id", task.id - ).findFirst() - if (item != null) { - task.fileSize = item.fileSize - task.status = item.status - task.currentSize = item.currentSize - task.hadLinkDvoList = item.hadLinkDvoList - //已上传后不在更新操作时间 - if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) { - //赋值时间,用于查询过滤 - task.operationTime = DateTimeUtil.getNowDate().time - } - } else { - //赋值时间,用于查询过滤 - task.operationTime = DateTimeUtil.getNowDate().time - } - realm.copyToRealmOrUpdate(task) - } - } - - } - } - } - - is NetResult.Error<*> -> { - withContext(Dispatchers.Main) { - Toast.makeText(context, "${result.exception.message}", Toast.LENGTH_SHORT) - .show() - } - } - - is NetResult.Failure<*> -> { - withContext(Dispatchers.Main) { - Toast.makeText(context, "${result.code}:${result.msg}", Toast.LENGTH_SHORT) - .show() - } - } - - is NetResult.Loading -> {} - } getLocalTaskList() } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 9772781f..08648202 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -234,7 +234,7 @@ android:textColor="@color/white" android:textSize="16sp" android:visibility="gone" - app:layout_constraintBottom_toBottomOf="@id/main_activity_geometry" + app:layout_constraintBottom_toTopOf="@id/main_activity_bottom_sheet" app:layout_constraintLeft_toLeftOf="@id/main_activity_top_sign_recyclerview" /> @@ -387,7 +387,7 @@ Date: Wed, 26 Jul 2023 18:37:35 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=E7=BA=A7=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/omdb_config.json | 84 +++++++++---------- .../com/navinfo/omqs/bean/ImportConfig.kt | 4 +- .../omqs/ui/activity/map/MainViewModel.kt | 7 ++ .../src/main/assets/editormarker.xml | 30 +++---- .../library/map/source/OMDBDataDecoder.java | 12 ++- .../map/source/OMDBReferenceDecoder.java | 2 +- .../collect/library/system/Constant.java | 2 +- 7 files changed, 78 insertions(+), 63 deletions(-) diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 0cf2e923..0d898a13 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -4,43 +4,43 @@ "table": "OMDB_CHECKPOINT", "code": 1012, "name": "检查点", - "zoomMin": 18, - "zoomMax": 23 + "zoomMin": 16, + "zoomMax": 19 }, "2001": { "table": "OMDB_RD_LINK", "code": 2001, "name": "道路线", - "zoomMin": 18, - "zoomMax": 19 + "zoomMin": 16, + "zoomMax": 17 }, "2002": { "table": "OMDB_RD_LINK_FUNCTION_CLASS", "code": 2002, "name": "道路功能等级", - "zoomMin": 18, - "zoomMax": 19 + "zoomMin": 16, + "zoomMax": 17 }, "2008": { "table": "OMDB_RD_LINK_KIND", "code": 2008, "name": "道路种别", - "zoomMin": 18, - "zoomMax": 19 + "zoomMin": 16, + "zoomMax": 17 }, "2010": { "table": "OMDB_LINK_DIRECT", "code": 2010, "name": "道路方向", - "zoomMin": 18, - "zoomMax": 19 + "zoomMin": 16, + "zoomMax": 17 }, "2011": { "table": "OMDB_LINK_NAME", "code": 2011, "name": "道路名", - "zoomMin": 18, - "zoomMax": 19, + "zoomMin": 16, + "zoomMax": 17, "transformer": [ { "k": "geometry", @@ -54,8 +54,8 @@ "table": "OMDB_LANE_MARK_BOUNDARYTYPE", "code": 2013, "name": "车道边界类型", - "zoomMin": 20, - "zoomMax": 23, + "zoomMin": 18, + "zoomMax": 21, "transformer": [ { "k": "geometry", @@ -69,22 +69,22 @@ "table": "OMDB_LINK_SPEEDLIMIT", "code": 2019, "name": "常规线限速", - "zoomMin": 18, - "zoomMax": 19 + "zoomMin": 16, + "zoomMax": 17 }, "2020": { "table": "OMDB_LINK_SPEEDLIMIT_COND", "code": 2020, "name": "条件线限速", - "zoomMin": 18, - "zoomMax": 19 + "zoomMin": 16, + "zoomMax": 17 }, "2021": { "table": "OMDB_LINK_SPEEDLIMIT_VAR", "code": 2021, "name": "可变线限速", - "zoomMin": 18, - "zoomMax": 19 + "zoomMin": 16, + "zoomMax": 17 }, "2022": { "table": "OMDB_CON_ACCESS", @@ -110,8 +110,8 @@ "table": "OMDB_RDBOUND_BOUNDARYTYPE", "code": 2083, "name": "道路边界类型", - "zoomMin": 20, - "zoomMax": 23 + "zoomMin": 18, + "zoomMax": 21 }, "2201":{ "table": "OMDB_BRIDGE", @@ -122,8 +122,8 @@ "table": "OMDB_TUNNEL", "code": 2202, "name": "隧道", - "zoomMin": 18, - "zoomMax": 23, + "zoomMin": 16, + "zoomMax": 21, "transformer": [ { "k": "geometry", @@ -137,8 +137,8 @@ "table": "OMDB_INTERSECTION", "code": 4001, "name": "路口", - "zoomMin": 18, - "zoomMax": 19, + "zoomMin": 16, + "zoomMax": 17, "transformer": [ { "k": "geometry", @@ -152,8 +152,8 @@ "table": "OMDB_SPEEDLIMIT", "code": 4002, "name": "常规点限速", - "zoomMin": 18, - "zoomMax": 23, + "zoomMin": 16, + "zoomMax": 21, "transformer": [ { "k": "maxSpeed", @@ -173,8 +173,8 @@ "table": "OMDB_SPEEDLIMIT_COND", "code": 4003, "name": "条件点限速", - "zoomMin": 18, - "zoomMax": 23, + "zoomMin": 16, + "zoomMax": 21, "transformer": [ { "k": "maxSpeed", @@ -188,8 +188,8 @@ "table": "OMDB_SPEEDLIMIT_VAR", "code": 4004, "name": "可变点限速", - "zoomMin": 18, - "zoomMax": 23, + "zoomMin": 16, + "zoomMax": 21, "transformer": [ { "k": "location", @@ -215,8 +215,8 @@ "table": "OMDB_RESTRICTION", "code": 4006, "name": "普通交限", - "zoomMin": 18, - "zoomMax": 23, + "zoomMin": 16, + "zoomMax": 21, "transformer": [ { "k": "geometry", @@ -254,8 +254,8 @@ "table": "OMDB_ELECTRONICEYE", "code": 4010, "name": "电子眼", - "zoomMin": 18, - "zoomMax": 23, + "zoomMin": 16, + "zoomMax": 21, "transformer": [ { "k": "geometry", @@ -287,8 +287,8 @@ "table": "OMDB_TRAFFICLIGHT", "code": 4022, "name": "交通灯", - "zoomMin": 18, - "zoomMax": 23, + "zoomMin": 16, + "zoomMax": 21, "transformer": [ ] }, @@ -296,8 +296,8 @@ "table": "OMDB_LANEINFO", "code": 4601, "name": "车信", - "zoomMin": 18, - "zoomMax": 19, + "zoomMin": 16, + "zoomMax": 17, "transformer": [ { "k": "geometry", @@ -323,8 +323,8 @@ "table": "OMDB_LANE_LINK_LG", "code": 5001, "name": "车道中心线", - "zoomMin": 20, - "zoomMax": 23, + "zoomMin": 18, + "zoomMax": 21, "transformer": [ { "k": "geometry", diff --git a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt index 4cbbb603..50ad0d80 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt @@ -115,8 +115,8 @@ class ImportConfig { class TableInfo { val table: String = "" val code: Int = 0 - val zoomMin: Int = 18 - val zoomMax: Int = 23 + val zoomMin: Int = 16 + val zoomMax: Int = 21 val name: String = "" var checked : Boolean = true var transformer: MutableList = mutableListOf() diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index d7695aae..c425344f 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -189,6 +189,8 @@ class MainViewModel @Inject constructor( private var disTime: Long = 1000 + private var currentMapZoomLevel: Int = 0 + init { mapController.mMapView.vtmMap.events.bind(Map.UpdateListener { e, mapPosition -> @@ -196,8 +198,13 @@ class MainViewModel @Inject constructor( Map.SCALE_EVENT, Map.MOVE_EVENT, Map.ROTATE_EVENT -> liveDataCenterPoint.value = mapPosition } + if(mapController.mMapView.vtmMap.mapPosition.zoomLevel>=16){ + + } + currentMapZoomLevel = mapController.mMapView.vtmMap.mapPosition.zoomLevel }) + currentMapZoomLevel = mapController.mMapView.vtmMap.mapPosition.zoomLevel shareUtil = ShareUtil(mapController.mMapView.context, 1) diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index 9fb51e19..d4f29fa3 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1,5 +1,5 @@ - @@ -1486,18 +1486,18 @@ - + - + - + @@ -1530,7 +1530,7 @@ - + @@ -1562,7 +1562,7 @@ - + @@ -1578,14 +1578,14 @@ - + 0 - + @@ -1597,7 +1597,7 @@ - + @@ -1660,7 +1660,7 @@ - + @@ -1687,13 +1687,13 @@ - + - + @@ -1709,7 +1709,7 @@ - + @@ -1722,7 +1722,7 @@ - + @@ -1737,7 +1737,7 @@ - + listResult) { + public boolean decode(int mapLevel,Tile tile, ITileDataSink sink, List listResult) { mTileDataSink = sink; mTileScale = 1 << tile.zoomLevel; mTileX = tile.tileX / mTileScale; @@ -74,10 +74,12 @@ public class OMDBDataDecoder extends TileDecoder { listResult.stream().iterator().forEachRemaining(new Consumer() { @Override public void accept(RenderEntity renderEntity) { - if(zoomLevel>=renderEntity.getZoomMin()&&zoomLevel<=renderEntity.getZoomMax()){ + if(!(mapLevelrenderEntity.getZoomMax())){ Map properties= new HashMap<>(renderEntity.getProperties().size()); properties.putAll(renderEntity.getProperties()); parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties); + }else{ + Log.e("qj","render"+renderEntity.name+"=="+renderEntity.getZoomMin()+"==="+renderEntity.getZoomMax()); } } }); @@ -188,4 +190,10 @@ public class OMDBDataDecoder extends TileDecoder { if (!hasName && fallbackName != null) mMapElement.tags.add(new Tag(Tag.KEY_NAME, fallbackName, false)); } + + public void clean(){ + if(mTileDataSink!=null){ + mTileDataSink.notifyAll(); + } + } } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java index 0596ffb5..ed7e07d4 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java @@ -70,7 +70,7 @@ public class OMDBReferenceDecoder extends TileDecoder { listResult.stream().iterator().forEachRemaining(new Consumer() { @Override public void accept(ReferenceEntity renderEntity) { - if(mapLevel>=renderEntity.getZoomMin()&&mapLevel<=renderEntity.getZoomMax()){ + if(!(mapLevelrenderEntity.getZoomMax())){ Map properties= new HashMap<>(renderEntity.getProperties().size()); properties.putAll(renderEntity.getProperties()); parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties); diff --git a/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java b/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java index a228f9bd..a09727ba 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java @@ -31,7 +31,7 @@ public class Constant { public static String[] HAD_LAYER_INVISIABLE_ARRAY; public static final int OVER_ZOOM = 21; public static final int MAX_ZOOM = 23; - public static final int OMDB_MIN_ZOOM = 18; + public static final int OMDB_MIN_ZOOM = 16; /** * 服务器地址 From 2b4b2645a66587e999934bd107ef6a32d5753172 Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Thu, 27 Jul 2023 11:16:36 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../omqs/http/taskdownload/TaskDownloadManager.kt | 6 ++++++ .../omqs/http/taskdownload/TaskDownloadScope.kt | 12 ++++++++---- .../navinfo/omqs/ui/activity/map/MainViewModel.kt | 2 +- .../omqs/ui/fragment/tasklist/TaskListAdapter.kt | 4 ++++ .../main/java/com/navinfo/omqs/ui/widget/SignUtil.kt | 11 +++++++++++ 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt index e3d31ba4..0c90394a 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt @@ -83,6 +83,12 @@ class TaskDownloadManager constructor( * 只有等待中的任务和正在下载中的任务才可以进行暂停操作 */ fun pause(id: Int) { + if (scopeMap.containsKey(id)) { + val downloadScope = scopeMap[id] + downloadScope?.let { + downloadScope.pause() + } + } if (taskScopeMap.containsKey(id)) { val downloadScope = taskScopeMap[id] downloadScope?.let { diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt index f628ed7d..16f873a4 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt @@ -60,7 +60,11 @@ class TaskDownloadScope( fun pause() { downloadJob?.cancel("pause") launch { - change(FileDownloadStatus.PAUSE) + if (taskBean.fileSize == 0L) { + change(FileDownloadStatus.NONE) + } else { + change(FileDownloadStatus.PAUSE) + } } } @@ -123,7 +127,7 @@ class TaskDownloadScope( /** * 导入数据 */ - private suspend fun importData(file: File? = null, taskId: Int?=0) { + private suspend fun importData(file: File? = null, taskId: Int? = 0) { try { Log.e("jingo", "importData SSS") change(FileDownloadStatus.IMPORTING) @@ -135,7 +139,7 @@ class TaskDownloadScope( fileNew ) if (taskId != null) { - importOMDBHelper.importOmdbZipFile(importOMDBHelper.omdbFile,taskId).collect { + importOMDBHelper.importOmdbZipFile(importOMDBHelper.omdbFile, taskId).collect { Log.e("jingo", "数据安装 $it") if (it == "finish") { change(FileDownloadStatus.DONE) @@ -183,7 +187,7 @@ class TaskDownloadScope( startPosition = 0 } if (fileTemp.length() > 0 && taskBean.fileSize > 0 && fileTemp.length() == taskBean.fileSize) { - importData(fileTemp,taskBean.id) + importData(fileTemp, taskBean.id) return } diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index bd112775..88fd2b3e 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -449,7 +449,7 @@ class MainViewModel @Inject constructor( ) if(itemList.size == 1){ - + SignUtil.getSignNameText(itemList[0]) } } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt index 9d450b60..9f017d33 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt @@ -306,7 +306,11 @@ class TaskListAdapter( binding.taskProgressText.text = "$progress%" binding.taskDownloadBtn.setProgress(progress) + } else { + binding.taskDownloadBtn.setProgress(0) + binding.taskProgressText.text = "" } + when (taskBean.status) { FileDownloadStatus.NONE -> { if (binding.taskProgressText.visibility == View.VISIBLE) binding.taskProgressText.visibility = diff --git a/app/src/main/java/com/navinfo/omqs/ui/widget/SignUtil.kt b/app/src/main/java/com/navinfo/omqs/ui/widget/SignUtil.kt index 3be3da98..7be5686c 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/widget/SignUtil.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/widget/SignUtil.kt @@ -80,6 +80,8 @@ class SignUtil { 2008 -> "种别" //道路方向 2010 -> "方向" + //车道边界类型 + 2013 -> "车道边界类型" //常规线限速 2019 -> "线限速" //车道数 @@ -404,7 +406,16 @@ class SignUtil { return stringBuffer.toString() } + /** + * 获取车道边界线详细信息 + */ + fun getLaneBoundaryInfo(data:RenderEntity){ + } + + /** + * 获取道路名列表 + */ fun getRoadNameList(data: RenderEntity): MutableList { val list = mutableListOf() if (data.code == 2011) { From 485c2b4b790745575d6842b704725197c1bba184 Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Thu, 27 Jul 2023 17:15:51 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=A6=BB=E7=BA=BF?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E4=B8=8B=E8=BD=BD=E7=9A=84=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E7=8A=B6=E6=80=81=20=E4=BF=AE=E6=94=B9=E8=AF=A6=E7=BB=86?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E9=9D=A2=E6=9D=BF=E5=BF=AB=E6=8D=B7=E8=BF=9B?= =?UTF-8?q?=E5=85=A5=E6=96=B0=E5=A2=9E=E6=95=B0=E6=8D=AE=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OfflineMapDownloadManager.kt | 1 - .../OfflineMapDownloadScope.kt | 23 +- .../http/taskdownload/TaskDownloadScope.kt | 4 - .../omqs/ui/activity/login/LoginViewModel.kt | 1 + .../omqs/ui/activity/map/MainViewModel.kt | 2 +- .../EvaluationResultViewModel.kt | 273 +++++++++--------- .../offlinemap/OfflineMapCityListAdapter.kt | 23 +- .../offlinemap/OfflineMapCityListFragment.kt | 17 ++ .../offlinemap/OfflineMapStateListFragment.kt | 12 + .../OfflineMapStateListViewModel.kt | 7 +- .../signMoreInfo/SignMoreInfoFragment.kt | 32 +- .../navinfo/omqs/ui/other/BaseViewHolder.kt | 1 + .../collect/library/map/NIMapView.java | 9 +- 13 files changed, 243 insertions(+), 162 deletions(-) diff --git a/app/src/main/java/com/navinfo/omqs/http/offlinemapdownload/OfflineMapDownloadManager.kt b/app/src/main/java/com/navinfo/omqs/http/offlinemapdownload/OfflineMapDownloadManager.kt index 8b6fbdf2..9920da8f 100644 --- a/app/src/main/java/com/navinfo/omqs/http/offlinemapdownload/OfflineMapDownloadManager.kt +++ b/app/src/main/java/com/navinfo/omqs/http/offlinemapdownload/OfflineMapDownloadManager.kt @@ -79,7 +79,6 @@ class OfflineMapDownloadManager( } launchNext(id) } - } /** diff --git a/app/src/main/java/com/navinfo/omqs/http/offlinemapdownload/OfflineMapDownloadScope.kt b/app/src/main/java/com/navinfo/omqs/http/offlinemapdownload/OfflineMapDownloadScope.kt index 5a251f8c..b89f9db4 100644 --- a/app/src/main/java/com/navinfo/omqs/http/offlinemapdownload/OfflineMapDownloadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/offlinemapdownload/OfflineMapDownloadScope.kt @@ -34,7 +34,7 @@ class OfflineMapDownloadScope( /** * 管理观察者,同时只有一个就行了 */ - private val observer = Observer {} +// private val observer = Observer {} // private var lifecycleOwner: LifecycleOwner? = null /** @@ -58,7 +58,13 @@ class OfflineMapDownloadScope( */ fun pause() { downloadJob?.cancel("pause") - change(FileDownloadStatus.PAUSE) + launch { + if (cityBean.fileSize == 0L) { + change(FileDownloadStatus.NONE) + } else { + change(FileDownloadStatus.PAUSE) + } + } } /** @@ -99,7 +105,6 @@ class OfflineMapDownloadScope( * 添加下载任务观察者 */ fun observer(owner: LifecycleOwner, ob: Observer) { - removeObserver() // this.lifecycleOwner = owner downloadData.observe(owner, ob) } @@ -167,11 +172,15 @@ class OfflineMapDownloadScope( } } + fun removeObserver() { - downloadData.observeForever(observer) -// lifecycleOwner?.let { - downloadData.removeObserver(observer) -// null +// downloadData.observeForever(observer) +//// lifecycleOwner?.let { +// downloadData.removeObserver(observer) +//// null +//// } +// if (lifecycleOwner != null) { +// downloadData.removeObservers(lifecycleOwner!!) // } } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt index 16f873a4..5e45f2d6 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt @@ -248,10 +248,6 @@ class TaskDownloadScope( //// null //// } if (lifecycleOwner != null) { - Log.e( - "jingo", - "移除的上一个监听者 ${lifecycleOwner.hashCode()} ${(lifecycleOwner as BaseViewHolder).tag}" - ) downloadData.removeObservers(lifecycleOwner!!) } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt index 628e0263..f167d595 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/login/LoginViewModel.kt @@ -362,6 +362,7 @@ class LoginViewModel @Inject constructor( .directory(userFolder) .name("OMQS.realm") .encryptionKey(password) + .allowQueriesOnUiThread(true) // .modules(Realm.getDefaultModule(), MyRealmModule()) .schemaVersion(2) .build() diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index 7e16d74b..a3860287 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -174,7 +174,7 @@ class MainViewModel @Inject constructor( */ private var bSelectPauseTrace = false - private var linkIdCache = "" + var linkIdCache = "" private var lastNiLocaion: NiLocation? = null diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt index 1c57cb41..570552df 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt @@ -444,10 +444,11 @@ class EvaluationResultViewModel @Inject constructor( */ fun initData(id: String) { - - viewModelScope.launch(Dispatchers.IO) { + Log.e("jingo", "捕捉到的要素 id = $id") + viewModelScope.launch(Dispatchers.Main) { val realm = Realm.getDefaultInstance() + val objects = realm.where(QsRecordBean::class.java).equalTo("id", id).findFirst() Log.e("jingo", "查询数据 id= $id") if (objects != null) { @@ -487,163 +488,163 @@ class EvaluationResultViewModel @Inject constructor( liveDataQsRecordBean.value?.attachmentBeanList = it.attachmentBeanList // 显示语音数据到界面 getChatMsgEntityList() - } + } } else { liveDataToastMessage.postValue("数据读取失败") + } + } } -} -} -/** - * 查询问题类型列表 - */ + /** + * 查询问题类型列表 + */ private suspend fun getChatMsgEntityList() { - val chatMsgEntityList: MutableList = ArrayList() - liveDataQsRecordBean.value?.attachmentBeanList?.forEach { - //1 录音 - if (it.type == 1) { - val chatMsgEntity = ChatMsgEntity() - chatMsgEntity.name = it.name - chatMsgEntity.voiceUri = Constant.USER_DATA_ATTACHEMNT_PATH - chatMsgEntityList.add(chatMsgEntity) + val chatMsgEntityList: MutableList = ArrayList() + liveDataQsRecordBean.value?.attachmentBeanList?.forEach { + //1 录音 + if (it.type == 1) { + val chatMsgEntity = ChatMsgEntity() + chatMsgEntity.name = it.name + chatMsgEntity.voiceUri = Constant.USER_DATA_ATTACHEMNT_PATH + chatMsgEntityList.add(chatMsgEntity) + } } - } - listDataChatMsgEntityList.postValue(chatMsgEntityList) -} - -fun addChatMsgEntity(filePath: String) { - - if (filePath.isNotEmpty()) { - var chatMsgEntityList: MutableList = ArrayList() - if (listDataChatMsgEntityList.value?.isEmpty() == false) { - chatMsgEntityList = listDataChatMsgEntityList.value!! - } - val chatMsgEntity = ChatMsgEntity() - chatMsgEntity.name = filePath.replace(Constant.USER_DATA_ATTACHEMNT_PATH, "").toString() - chatMsgEntity.voiceUri = Constant.USER_DATA_ATTACHEMNT_PATH - chatMsgEntityList.add(chatMsgEntity) - - - var attachmentList: RealmList = RealmList() - - //赋值处理 - if (liveDataQsRecordBean.value?.attachmentBeanList?.isEmpty() == false) { - attachmentList = liveDataQsRecordBean.value?.attachmentBeanList!! - } - - val attachmentBean = AttachmentBean() - attachmentBean.name = chatMsgEntity.name!! - attachmentBean.type = 1 - attachmentList.add(attachmentBean) - liveDataQsRecordBean.value?.attachmentBeanList = attachmentList - listDataChatMsgEntityList.postValue(chatMsgEntityList) } -} -fun startSoundMetter(activity: Activity, v: View) { + fun addChatMsgEntity(filePath: String) { - if (mSpeakMode == null) { - mSpeakMode = SpeakMode(activity) - } + if (filePath.isNotEmpty()) { + var chatMsgEntityList: MutableList = ArrayList() + if (listDataChatMsgEntityList.value?.isEmpty() == false) { + chatMsgEntityList = listDataChatMsgEntityList.value!! + } + val chatMsgEntity = ChatMsgEntity() + chatMsgEntity.name = filePath.replace(Constant.USER_DATA_ATTACHEMNT_PATH, "").toString() + chatMsgEntity.voiceUri = Constant.USER_DATA_ATTACHEMNT_PATH + chatMsgEntityList.add(chatMsgEntity) - //语音识别动画 - if (pop == null) { - pop = PopupWindow() - pop!!.width = ViewGroup.LayoutParams.MATCH_PARENT - pop!!.height = ViewGroup.LayoutParams.WRAP_CONTENT - pop!!.setBackgroundDrawable(BitmapDrawable()) - val view = - View.inflate(activity as Context, R.layout.cv_card_voice_rcd_hint_window, null) - pop!!.contentView = view - volume = view.findViewById(R.id.volume) - } - pop!!.update() + var attachmentList: RealmList = RealmList() - Constant.IS_VIDEO_SPEED = true - //录音动画 - if (pop != null) { - pop!!.showAtLocation(v, Gravity.CENTER, 0, 0) - } - volume!!.setBackgroundResource(R.drawable.pop_voice_img) - val animation = volume!!.background as AnimationDrawable - animation.start() - - val name: String = DateTimeUtil.getTimeSSS().toString() + ".m4a" - if (mSoundMeter == null) { - mSoundMeter = SoundMeter() - } - mSoundMeter!!.setmListener(object : SoundMeter.OnSoundMeterListener { - @RequiresApi(Build.VERSION_CODES.Q) - override fun onSuccess(filePath: String?) { - if (!TextUtils.isEmpty(filePath) && File(filePath).exists()) { - if (File(filePath) == null || File(filePath).length() < 1600) { - ToastUtils.showLong("语音时间太短,无效!") - mSpeakMode!!.speakText("语音时间太短,无效") - stopSoundMeter() - return - } + //赋值处理 + if (liveDataQsRecordBean.value?.attachmentBeanList?.isEmpty() == false) { + attachmentList = liveDataQsRecordBean.value?.attachmentBeanList!! } - mSpeakMode!!.speakText("结束录音") + val attachmentBean = AttachmentBean() + attachmentBean.name = chatMsgEntity.name!! + attachmentBean.type = 1 + attachmentList.add(attachmentBean) + liveDataQsRecordBean.value?.attachmentBeanList = attachmentList - addChatMsgEntity(filePath!!) - } - - @RequiresApi(api = Build.VERSION_CODES.Q) - override fun onfaild(message: String?) { - ToastUtils.showLong("录制失败!") - mSpeakMode!!.speakText("录制失败") - stopSoundMeter() - } - }) - - mSoundMeter!!.start(Constant.USER_DATA_ATTACHEMNT_PATH + name) - ToastUtils.showLong("开始录音") - mSpeakMode!!.speakText("开始录音") -} - -//停止语音录制 -@RequiresApi(api = Build.VERSION_CODES.Q) -fun stopSoundMeter() { - //先重置标识,防止按钮抬起时触发语音结束 - Constant.IS_VIDEO_SPEED = false - if (mSoundMeter != null && mSoundMeter!!.isStartSound) { - mSoundMeter!!.stop() - } - pop?.let { - if (it.isShowing) { - it.dismiss() + listDataChatMsgEntityList.postValue(chatMsgEntityList) + } + } + + fun startSoundMetter(activity: Activity, v: View) { + + if (mSpeakMode == null) { + mSpeakMode = SpeakMode(activity) + } + + //语音识别动画 + if (pop == null) { + pop = PopupWindow() + pop!!.width = ViewGroup.LayoutParams.MATCH_PARENT + pop!!.height = ViewGroup.LayoutParams.WRAP_CONTENT + pop!!.setBackgroundDrawable(BitmapDrawable()) + val view = + View.inflate(activity as Context, R.layout.cv_card_voice_rcd_hint_window, null) + pop!!.contentView = view + volume = view.findViewById(R.id.volume) + } + + pop!!.update() + + Constant.IS_VIDEO_SPEED = true + //录音动画 + if (pop != null) { + pop!!.showAtLocation(v, Gravity.CENTER, 0, 0) + } + volume!!.setBackgroundResource(R.drawable.pop_voice_img) + val animation = volume!!.background as AnimationDrawable + animation.start() + + val name: String = DateTimeUtil.getTimeSSS().toString() + ".m4a" + if (mSoundMeter == null) { + mSoundMeter = SoundMeter() + } + mSoundMeter!!.setmListener(object : SoundMeter.OnSoundMeterListener { + @RequiresApi(Build.VERSION_CODES.Q) + override fun onSuccess(filePath: String?) { + if (!TextUtils.isEmpty(filePath) && File(filePath).exists()) { + if (File(filePath) == null || File(filePath).length() < 1600) { + ToastUtils.showLong("语音时间太短,无效!") + mSpeakMode!!.speakText("语音时间太短,无效") + stopSoundMeter() + return + } + } + + mSpeakMode!!.speakText("结束录音") + + addChatMsgEntity(filePath!!) + } + + @RequiresApi(api = Build.VERSION_CODES.Q) + override fun onfaild(message: String?) { + ToastUtils.showLong("录制失败!") + mSpeakMode!!.speakText("录制失败") + stopSoundMeter() + } + }) + + mSoundMeter!!.start(Constant.USER_DATA_ATTACHEMNT_PATH + name) + ToastUtils.showLong("开始录音") + mSpeakMode!!.speakText("开始录音") + } + + //停止语音录制 + @RequiresApi(api = Build.VERSION_CODES.Q) + fun stopSoundMeter() { + //先重置标识,防止按钮抬起时触发语音结束 + Constant.IS_VIDEO_SPEED = false + if (mSoundMeter != null && mSoundMeter!!.isStartSound) { + mSoundMeter!!.stop() + } + pop?.let { + if (it.isShowing) { + it.dismiss() + } } } -} -fun savePhoto(bitmap: Bitmap) { - viewModelScope.launch(Dispatchers.IO) { - // 创建一个名为 "MyApp" 的文件夹 - val myAppDir = File(Constant.USER_DATA_ATTACHEMNT_PATH) + fun savePhoto(bitmap: Bitmap) { + viewModelScope.launch(Dispatchers.IO) { + // 创建一个名为 "MyApp" 的文件夹 + val myAppDir = File(Constant.USER_DATA_ATTACHEMNT_PATH) if (!myAppDir.exists()) myAppDir.mkdirs() // 确保文件夹已创建 - // 创建一个名为 fileName 的文件 - val file = File(myAppDir, "${UUID.randomUUID()}.png") - file.createNewFile() // 创建文件 + // 创建一个名为 fileName 的文件 + val file = File(myAppDir, "${UUID.randomUUID()}.png") + file.createNewFile() // 创建文件 - // 将 Bitmap 压缩为 JPEG 格式,并将其写入文件中 - val out = FileOutputStream(file) - bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out) - out.flush() - out.close() - var picList = mutableListOf() - if (liveDataPictureList.value == null) { - picList.add(file.absolutePath) - } else { - picList.addAll(liveDataPictureList.value!!) - picList.add(file.absolutePath) + // 将 Bitmap 压缩为 JPEG 格式,并将其写入文件中 + val out = FileOutputStream(file) + bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out) + out.flush() + out.close() + var picList = mutableListOf() + if (liveDataPictureList.value == null) { + picList.add(file.absolutePath) + } else { + picList.addAll(liveDataPictureList.value!!) + picList.add(file.absolutePath) + } + liveDataPictureList.postValue(picList) } - liveDataPictureList.postValue(picList) - } } @@ -661,5 +662,5 @@ fun savePhoto(bitmap: Bitmap) { } } } -} + } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapCityListAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapCityListAdapter.kt index 9bf60d86..f6a13032 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapCityListAdapter.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapCityListAdapter.kt @@ -5,6 +5,7 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.lifecycle.Lifecycle import androidx.lifecycle.Observer import com.navinfo.omqs.R import com.navinfo.omqs.databinding.AdapterOfflineMapCityBinding @@ -14,6 +15,7 @@ import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.tools.FileManager.Companion.FileDownloadStatus import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter import com.navinfo.omqs.ui.other.BaseViewHolder +import com.navinfo.omqs.ui.other.OnLifecycleStateListener import javax.inject.Inject /** @@ -68,7 +70,26 @@ class OfflineMapCityListAdapter( changeViews(binding, cityBean) downloadManager.addTask(cityBean) - downloadManager.observer(cityBean.id, holder, DownloadObserver(cityBean.id, holder)) + + holder.addObserver(object : OnLifecycleStateListener { + override fun onState(tag: String, state: Lifecycle.State) { + when (state) { + Lifecycle.State.STARTED -> { + downloadManager.observer( + cityBean.id, + holder, + DownloadObserver(cityBean.id, holder) + ) + } + Lifecycle.State.DESTROYED -> { + downloadManager.removeObserver(cityBean.id) + } + else -> {} + } + } + }) + + binding.offlineMapDownloadBtn.tag = position binding.offlineMapDownloadBtn.setOnClickListener(downloadBtnClick) binding.offlineMapCityName.text = cityBean.name diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapCityListFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapCityListFragment.kt index 5d64468d..2e0a88d4 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapCityListFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapCityListFragment.kt @@ -51,6 +51,23 @@ class OfflineMapCityListFragment : Fragment() { viewModel.cityListLiveData.observe(viewLifecycleOwner) { adapter.refreshData(it) } + } + + + override fun onStart() { + super.onStart() + } + + override fun onStop() { + super.onStop() + } + + override fun onPause() { + super.onPause() + } + + override fun onResume() { + super.onResume() viewModel.getCityList() } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapStateListFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapStateListFragment.kt index 41c3b337..8d29ebea 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapStateListFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapStateListFragment.kt @@ -54,6 +54,18 @@ class OfflineMapStateListFragment : Fragment() { } } + override fun onStart() { + super.onStart() + } + + override fun onStop() { + super.onStop() + } + + override fun onPause() { + super.onPause() + } + override fun onDestroyView() { super.onDestroyView() _binding = null diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapStateListViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapStateListViewModel.kt index 1490e33c..8bca9b4e 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapStateListViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapStateListViewModel.kt @@ -29,12 +29,7 @@ class OfflineMapStateListViewModel @Inject constructor( fun getCityList() { viewModelScope.launch(Dispatchers.IO) { val list = roomDatabase.getOfflineMapDao().getOfflineMapListWithOutNone() - if (cityListLiveData.value != null) { - if (cityListLiveData.value!!.size != list.size) - cityListLiveData.postValue(list) - }else{ - cityListLiveData.postValue(list) - } + cityListLiveData.postValue(list) } } } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/signMoreInfo/SignMoreInfoFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/signMoreInfo/SignMoreInfoFragment.kt index 471f39fb..3a77f5c8 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/signMoreInfo/SignMoreInfoFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/signMoreInfo/SignMoreInfoFragment.kt @@ -5,8 +5,11 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.activityViewModels +import androidx.navigation.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.omqs.R +import com.navinfo.omqs.bean.SignBean import com.navinfo.omqs.databinding.FragmentSignInfoBinding import com.navinfo.omqs.ui.activity.map.MainViewModel import com.navinfo.omqs.ui.fragment.BaseFragment @@ -53,7 +56,7 @@ class SignMoreInfoFragment : BaseFragment() { adapter.refreshData(SignUtil.getRoadNameList(it)) } //常规点限速 - 4002->{ + 4002 -> { val adapter = ElectronicEyeInfoAdapter() binding.signInfoRecyclerview.adapter = adapter adapter.refreshData(SignUtil.getSpeedLimitMoreInfoText(it)) @@ -91,6 +94,33 @@ class SignMoreInfoFragment : BaseFragment() { .commit() } } + binding.signInfoTitle.setOnClickListener { + activity?.run { + val rightController = findNavController(R.id.main_activity_right_fragment) + rightController.currentDestination?.let { + if (it.id == R.id.RightEmptyFragment) { + val bundle = Bundle() + val element = viewModel.liveDataSignMoreInfo.value + if (element != null) { + val signBean = SignBean( + iconId = SignUtil.getSignIcon(element), + iconText = SignUtil.getSignIconText(element), + linkId = element.properties[RenderEntity.Companion.LinkTable.linkPid] + ?: "", + name = SignUtil.getSignNameText(element), + bottomRightText = SignUtil.getSignBottomRightText(element), + renderEntity = element, + isMoreInfo = SignUtil.isMoreInfo(element), + index = SignUtil.getRoadInfoIndex(element) + ) + bundle.putParcelable("SignBean", signBean) + bundle.putBoolean("AutoSave", false) + rightController.navigate(R.id.EvaluationResultFragment, bundle) + } + } + } + } + } } override fun onDestroyView() { diff --git a/app/src/main/java/com/navinfo/omqs/ui/other/BaseViewHolder.kt b/app/src/main/java/com/navinfo/omqs/ui/other/BaseViewHolder.kt index 7127a482..35e78452 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/other/BaseViewHolder.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/other/BaseViewHolder.kt @@ -1,5 +1,6 @@ package com.navinfo.omqs.ui.other +import android.util.Log import android.view.View import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/NIMapView.java b/collect-library/src/main/java/com/navinfo/collect/library/map/NIMapView.java index b98aa4a3..e8531989 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/NIMapView.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/NIMapView.java @@ -604,11 +604,10 @@ public final class NIMapView extends RelativeLayout { BASE(0)/*底图图层组*/, VECTOR_TILE(1)/*矢量瓦片组*/, VECTOR(2)/*高亮组*/, - OPERATE_LINE(3)/*操作图层组*/, - OPERATE_MARKER(4)/*操作图层组*/, - NAVIGATION(5)/*定位导航组*/, - LABEL(6)/*图标,文字图层*/; - + NAVIGATION(3)/*定位导航组*/, + LABEL(4)/*图标,文字图层*/, + OPERATE_LINE(5)/*操作图层组*/, + OPERATE_MARKER(6)/*操作图层组*/; int groupIndex; LAYER_GROUPS(int groupIndex) { From 5266cbb4b1415d687352699c62f946408858db30 Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Fri, 28 Jul 2023 10:03:38 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E8=AF=84=E6=B5=8B=E6=95=B0=E6=8D=AE=E7=BC=96=E8=BE=91=E6=97=B6?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E4=BB=BB=E5=8A=A1=E5=85=B3=E9=97=AD=20?= =?UTF-8?q?=E5=8F=B3=E4=BE=A7=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EvaluationResultViewModel.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt index 570552df..8f4d0c88 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt @@ -652,14 +652,19 @@ class EvaluationResultViewModel @Inject constructor( * 监听任务选择变化 */ override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { - if (key == Constant.SELECT_TASK_ID && oldBean == null) { - viewModelScope.launch(Dispatchers.IO) { - val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) - val realm = Realm.getDefaultInstance() - val objects = realm.where(TaskBean::class.java).equalTo("id", taskId).findFirst() - if (objects != null) { - liveDataTaskBean.postValue(realm.copyFromRealm(objects)) + if (key == Constant.SELECT_TASK_ID) { + if (oldBean == null) { + viewModelScope.launch(Dispatchers.IO) { + val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) + val realm = Realm.getDefaultInstance() + val objects = + realm.where(TaskBean::class.java).equalTo("id", taskId).findFirst() + if (objects != null) { + liveDataTaskBean.postValue(realm.copyFromRealm(objects)) + } } + } else { + liveDataFinish.postValue(true) } } }