diff --git a/app/build.gradle b/app/build.gradle index 9c3cc744..027eb8ae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,6 +6,12 @@ plugins { id 'kotlin-parcelize' // 序列化 id 'androidx.navigation.safeargs.kotlin'//Safe Args传递数据 } + +//定义时间 +def releaseTime() { + return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) +} + android { namespace 'com.navinfo.omqs' compileSdk 33 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 30920313..449d6cf9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,13 +1,15 @@ - + @@ -57,11 +59,10 @@ - diff --git a/app/src/main/java/com/navinfo/omqs/OMQSApplication.kt b/app/src/main/java/com/navinfo/omqs/OMQSApplication.kt index d6d09a80..07c6b4dc 100644 --- a/app/src/main/java/com/navinfo/omqs/OMQSApplication.kt +++ b/app/src/main/java/com/navinfo/omqs/OMQSApplication.kt @@ -1,6 +1,11 @@ package com.navinfo.omqs +import android.app.Activity import android.app.Application +import android.content.pm.ActivityInfo +import android.content.res.Configuration +import android.view.Surface +import android.view.WindowManager import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.ui.manager.TakePhotoManager import com.navinfo.omqs.util.NetUtils @@ -23,5 +28,4 @@ class OMQSApplication : Application() { val hashBytes = messageDigest.digest(inputString.toByteArray()) return hashBytes.joinToString("") { "%02x".format(it) }; } - } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt b/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt index f93034a8..7f257d6e 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt @@ -12,7 +12,7 @@ data class EvaluationInfo( val linkPid: String = "",//Link号 @SerializedName("linkStatus") - val linkStatus: Int = 0,//Link状态 + val linkStatus: Int = 0,//Link状态 ;0未测评 1已测评 2原库新增 3现场新增 @SerializedName("markId") val markId: String = "",//Link状态 @@ -27,7 +27,7 @@ data class EvaluationInfo( val featureName: String = "",//问题类型 @SerializedName("problemType") - val problemType: String = "",//问题现象 0错误 1多余 2遗漏 服务字段定义为Integer,使用包装类,对应无值情况为空 + val problemType: Int = 0,//问题现象 0错误 1多余 2遗漏 服务字段定义为Integer,使用包装类,对应无值情况为空 @SerializedName("problemPhenomenon") val problemPhenomenon: String = "",//问题现象 @@ -48,7 +48,7 @@ data class EvaluationInfo( val evaluationDate: String = "",//测评日期(yyyy-mm-dd) @SerializedName("evaluationWay") - val evaluationWay: String = "2",//测评方式 1生产测评 2现场测评 服务字段定义为Integer,使用包装类,对应无值情况为空 + val evaluationWay: Int = 2,//测评方式 1生产测评 2现场测评 服务字段定义为Integer,使用包装类,对应无值情况为空 @SerializedName("roadClassfcation") val roadClassfcation: String = "",//道路种别 diff --git a/app/src/main/java/com/navinfo/omqs/http/DefaultTaskResponse.kt b/app/src/main/java/com/navinfo/omqs/http/DefaultResponse.kt similarity index 78% rename from app/src/main/java/com/navinfo/omqs/http/DefaultTaskResponse.kt rename to app/src/main/java/com/navinfo/omqs/http/DefaultResponse.kt index a51f8098..ac0fba88 100644 --- a/app/src/main/java/com/navinfo/omqs/http/DefaultTaskResponse.kt +++ b/app/src/main/java/com/navinfo/omqs/http/DefaultResponse.kt @@ -1,6 +1,6 @@ package com.navinfo.omqs.http -class DefaultTaskResponse { +class DefaultResponse { var success: Boolean = false var msg: String = "" var obj: T? = null diff --git a/app/src/main/java/com/navinfo/omqs/http/DefaultUserResponse.kt b/app/src/main/java/com/navinfo/omqs/http/DefaultUserResponse.kt deleted file mode 100644 index cea3dcc6..00000000 --- a/app/src/main/java/com/navinfo/omqs/http/DefaultUserResponse.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.navinfo.omqs.http - -class DefaultUserResponse { - var success: Boolean = false - var msg: String = "" - var obj: T? = null -} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/http/NetworkService.kt b/app/src/main/java/com/navinfo/omqs/http/NetworkService.kt index 2698d9b6..5fe4dd2d 100644 --- a/app/src/main/java/com/navinfo/omqs/http/NetworkService.kt +++ b/app/src/main/java/com/navinfo/omqs/http/NetworkService.kt @@ -19,10 +19,10 @@ interface NetworkService { /** * 获取任务列表 */ - suspend fun getTaskList(evaluatorNo:String): NetResult>> + suspend fun getTaskList(evaluatorNo:String): NetResult>> /** * 登录接口 */ - suspend fun loginUser(loginUserBean: LoginUserBean): NetResult> + suspend fun loginUser(loginUserBean: LoginUserBean): NetResult> } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/http/NetworkServiceImpl.kt b/app/src/main/java/com/navinfo/omqs/http/NetworkServiceImpl.kt index ffa4f2f1..374bd7e6 100644 --- a/app/src/main/java/com/navinfo/omqs/http/NetworkServiceImpl.kt +++ b/app/src/main/java/com/navinfo/omqs/http/NetworkServiceImpl.kt @@ -38,7 +38,7 @@ class NetworkServiceImpl @Inject constructor( } } - override suspend fun getTaskList(evaluatorNo: String): NetResult>> = + override suspend fun getTaskList(evaluatorNo: String): NetResult>> = //在IO线程中运行 withContext(Dispatchers.IO) { return@withContext try { @@ -57,7 +57,7 @@ class NetworkServiceImpl @Inject constructor( } } - override suspend fun loginUser(loginUserBean: LoginUserBean): NetResult> = + override suspend fun loginUser(loginUserBean: LoginUserBean): NetResult> = //在IO线程中运行 withContext(Dispatchers.IO) { return@withContext try { diff --git a/app/src/main/java/com/navinfo/omqs/http/RetrofitNetworkServiceAPI.kt b/app/src/main/java/com/navinfo/omqs/http/RetrofitNetworkServiceAPI.kt index a2592cdd..67136348 100644 --- a/app/src/main/java/com/navinfo/omqs/http/RetrofitNetworkServiceAPI.kt +++ b/app/src/main/java/com/navinfo/omqs/http/RetrofitNetworkServiceAPI.kt @@ -47,7 +47,7 @@ interface RetrofitNetworkServiceAPI { */ @Headers("Content-Type: application/json") @POST("/devcp/loginUser") - suspend fun retrofitLoginUser(@Body loginUserBean: LoginUserBean): Response> + suspend fun retrofitLoginUser(@Body loginUserBean: LoginUserBean): Response> /** * 下载文件 @@ -62,11 +62,11 @@ interface RetrofitNetworkServiceAPI { @GET("/devcp/getEvaluationTask?evaluatType=2") suspend fun retrofitGetTaskList( @Query("evaluatorNo") evaluatorNo: String, - ): Response>> + ): Response>> @Headers("Content-Type: application/json") @POST("/devcp/uploadSceneProblem") - suspend fun postRequest(@Body listEvaluationInfo: List?): Response + suspend fun postRequest(@Body listEvaluationInfo: List?): Response> /** * @FormUrlEncoded 请求格式注解,请求实体是一个From表单,每个键值对需要使用@Field注解 diff --git a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt index f2976f61..e7534861 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt @@ -2,6 +2,7 @@ package com.navinfo.omqs.http.taskupload import android.os.Build import android.util.Log +import android.widget.Toast import androidx.annotation.RequiresApi import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.MutableLiveData @@ -9,6 +10,8 @@ import androidx.lifecycle.Observer import com.navinfo.collect.library.data.entity.QsRecordBean import com.navinfo.omqs.bean.EvaluationInfo import com.navinfo.collect.library.data.entity.TaskBean +import com.navinfo.omqs.bean.SysUserBean +import com.navinfo.omqs.http.DefaultResponse import com.navinfo.omqs.tools.FileManager.Companion.FileUploadStatus import io.realm.Realm import kotlinx.coroutines.* @@ -68,6 +71,7 @@ class TaskUploadScope( private fun change(status: Int, message: String = "") { if (taskBean.syncStatus != status) { taskBean.syncStatus = status + taskBean.errMsg = message uploadData.postValue(taskBean) //同步中不进行状态记录,只做界面变更显示 if(status!=FileUploadStatus.UPLOADING){ @@ -121,15 +125,15 @@ class TaskUploadScope( if (objects != null&&objects.size>0) { val copyList = realm.copyFromRealm(objects) copyList.forEach { - var problemType = "0" + var problemType = 0 if(it.problemType=="错误"){ - problemType = "0" + problemType = 0 }else if(it.problemType=="多余"){ - problemType = "1" + problemType = 1 }else if(it.problemType=="遗漏"){ - problemType = "2" + problemType = 2 } - var evaluationWay = "2"; + var evaluationWay = 2 /* if(it.evaluationWay=="生产测评"){ evaluationWay = "1" }else if(it.evaluationWay=="现场测评"){ @@ -170,14 +174,14 @@ class TaskUploadScope( trackPhotoNumber = "", markGeometry = "", featureName = "", - problemType = "", + problemType = 0, problemPhenomenon = "", problemDesc = "", problemLink = "", problemReason = "", evaluatorName = "", evaluationDate = "", - evaluationWay = "", + evaluationWay = 2, roadClassfcation = "", roadFunctionGrade = "", noEvaluationreason = "", @@ -193,10 +197,13 @@ class TaskUploadScope( val result = uploadManager.netApi.postRequest(bodyList)// .enqueue(object : // Callback { if (result.isSuccessful) { - if (result.code() == 200) { -// taskBean.syncStatus = FileUploadStatus.DONE - // handle the response - change(FileUploadStatus.DONE) + if (result.code() == 200&&result.body()!=null) { + val defaultUserResponse = result.body() as DefaultResponse<*> + if(defaultUserResponse.success){ + change(FileUploadStatus.DONE,"上传成功") + }else{ + change(FileUploadStatus.ERROR,"${defaultUserResponse.msg}") + } } else { // handle the failure change(FileUploadStatus.ERROR) diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt index a1314579..53b9439f 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt @@ -13,10 +13,15 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder open class BaseActivity : AppCompatActivity() { private var loadingDialog: AlertDialog? = null override fun onCreate(savedInstanceState: Bundle?) { - requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE//横屏 + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; super.onCreate(savedInstanceState) } + override fun onResume() { + super.onResume() + } + + /** * 显示loading dialog */ 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 2b354fb7..5def15d7 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 @@ -13,7 +13,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.navinfo.omqs.R import com.navinfo.omqs.databinding.ActivityLoginBinding import com.navinfo.omqs.ui.activity.CheckPermissionsActivity -import com.navinfo.omqs.ui.activity.PermissionsActivity import com.navinfo.omqs.ui.activity.map.MainActivity import dagger.hilt.android.AndroidEntryPoint 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 42665c08..095664d1 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 @@ -12,7 +12,7 @@ import com.navinfo.omqs.Constant import com.navinfo.omqs.bean.LoginUserBean import com.navinfo.omqs.bean.SysUserBean import com.navinfo.omqs.db.RoomAppDatabase -import com.navinfo.omqs.http.DefaultUserResponse +import com.navinfo.omqs.http.DefaultResponse import com.navinfo.omqs.http.NetResult import com.navinfo.omqs.http.NetworkService import com.navinfo.omqs.tools.FileManager @@ -119,7 +119,7 @@ class LoginViewModel @Inject constructor( is NetResult.Success<*> ->{ if (result.data!=null) { try { - val defaultUserResponse = result.data as DefaultUserResponse + val defaultUserResponse = result.data as DefaultResponse if(defaultUserResponse.success){ if(defaultUserResponse.obj==null|| defaultUserResponse.obj!!.userCode==null){ withContext(Dispatchers.Main) { diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt index 5a130f78..286bf347 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt @@ -12,12 +12,9 @@ import android.widget.EditText import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels -import androidx.annotation.RequiresApi -import androidx.core.view.WindowCompat import androidx.databinding.DataBindingUtil +import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import androidx.navigation.NavController -import androidx.navigation.NavDestination import androidx.navigation.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -30,6 +27,10 @@ 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.ui.fragment.console.ConsoleFragment +import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapFragment +import com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListFragment +import com.navinfo.omqs.ui.fragment.tasklist.TaskManagerFragment import com.navinfo.omqs.ui.widget.RecyclerViewSpacesItemDecoration import com.navinfo.omqs.util.FlowEventBus import com.navinfo.omqs.util.SpeakMode @@ -49,6 +50,14 @@ class MainActivity : BaseActivity() { private lateinit var binding: ActivityMainBinding private val viewModel by viewModels() + /** + * 左侧fragment + */ + private var leftFragment: Fragment? = null + + /** + * 是否开启右侧面板 + */ var switchFragment = false /** @@ -79,7 +88,7 @@ class MainActivity : BaseActivity() { * 提前显示要素看板 */ private val signAdapter by lazy { - SignAdapter { position, autoSave,signBean -> + SignAdapter { _, autoSave, signBean -> rightController.currentDestination?.let { if (it.id == R.id.RightEmptyFragment) { val bundle = Bundle() @@ -95,7 +104,7 @@ class MainActivity : BaseActivity() { * 道路信息看板 */ private val topSignAdapter by lazy { - TopSignAdapter { position, signBean -> + TopSignAdapter { _, signBean -> rightController.currentDestination?.let { if (it.id == R.id.RightEmptyFragment) { val bundle = Bundle() @@ -108,7 +117,6 @@ class MainActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { - WindowCompat.setDecorFitsSystemWindows(window, false) super.onCreate(savedInstanceState) val checkIntent = Intent() @@ -138,22 +146,19 @@ class MainActivity : BaseActivity() { //给xml传递viewModel对象 binding.viewModel = viewModel - binding.mainActivityVoice.setOnTouchListener(object : View.OnTouchListener { - @RequiresApi(Build.VERSION_CODES.Q) - override fun onTouch(v: View?, event: MotionEvent?): Boolean { - when (event?.action) { - MotionEvent.ACTION_DOWN -> { - voiceOnTouchStart()//Do Something - Log.e("qj", "voiceOnTouchStart") - } - MotionEvent.ACTION_UP -> { - voiceOnTouchStop()//Do Something - Log.e("qj", "voiceOnTouchStop") - } + binding.mainActivityVoice.setOnTouchListener { v, event -> + when (event?.action) { + MotionEvent.ACTION_DOWN -> { + voiceOnTouchStart()//Do Something + Log.e("qj", "voiceOnTouchStart") + } + MotionEvent.ACTION_UP -> { + voiceOnTouchStop()//Do Something + Log.e("qj", "voiceOnTouchStop") } - return v?.onTouchEvent(event) ?: true } - }) + v?.onTouchEvent(event) ?: true + } viewModel.liveDataQsRecordIdList.observe(this) { //处理页面跳转 @@ -200,12 +205,19 @@ class MainActivity : BaseActivity() { } //监听地图中点变化 viewModel.liveDataCenterPoint.observe(this) { - binding.mainActivityGeometry.text = "经纬度:${ - BigDecimal(it.longitude).setScale( - 7, - RoundingMode.HALF_UP - ) - },${BigDecimal(it.latitude).setScale(7, RoundingMode.HALF_UP)}" + Log.e("qj","${it.longitude}") + try{ + if(it!=null&&it.longitude!=null&&it.latitude!=null){ + binding.mainActivityGeometry.text = "经纬度:${ + BigDecimal(it.longitude).setScale( + 7, + RoundingMode.HALF_UP + ) + },${BigDecimal(it.latitude).setScale(7, RoundingMode.HALF_UP)}" + } + }catch (e:Exception){ + Log.e("qj","异常") + } } lifecycleScope.launch { @@ -217,7 +229,7 @@ class MainActivity : BaseActivity() { } } - findNavController(R.id.main_activity_right_fragment).addOnDestinationChangedListener { controller, destination, arguments -> + findNavController(R.id.main_activity_right_fragment).addOnDestinationChangedListener { _, destination, arguments -> if (destination.id == R.id.RightEmptyFragment) { binding.mainActivityRightVisibilityButtonsGroup.visibility = View.VISIBLE } else { @@ -226,6 +238,9 @@ class MainActivity : BaseActivity() { binding.mainActivitySelectLine.isSelected = false } } + + supportFragmentManager.beginTransaction() + .add(R.id.console_fragment_layout, ConsoleFragment()).commit() } //根据输入的经纬度跳转坐标 @@ -266,9 +281,6 @@ class MainActivity : BaseActivity() { //开启定位 mapController.locationLayerHandler.startLocation() mapController.mMapView.setLogoVisable(View.GONE) - //启动轨迹存储 -// viewModel.startSaveTraceThread(this) - } override fun onPause() { @@ -292,7 +304,15 @@ class MainActivity : BaseActivity() { * 打开个人中菜单 */ fun openMenu() { - binding.mainActivityDrawer.open() + supportFragmentManager.beginTransaction() + .replace(R.id.console_fragment_layout, ConsoleFragment()).commit() + if (leftFragment != null) { + supportFragmentManager.beginTransaction().remove(leftFragment!!).commit() + leftFragment = null + binding.mainActivityBottomSheetGroup.visibility = View.GONE + binding.mainActivityLeftFragment.visibility = View.GONE + } +// binding.mainActivityDrawer.open() } /** @@ -328,7 +348,7 @@ class MainActivity : BaseActivity() { /** * 点击搜索 */ - fun onClickSerach() { + fun onClickSearch() { } @@ -389,18 +409,89 @@ class MainActivity : BaseActivity() { binding.mainActivitySelectLine.isSelected = viewModel.isSelectRoad() } - fun voiceOnTouchStart() { - viewModel.startSoundMetter(this, binding.mainActivityVoice) - } - @RequiresApi(Build.VERSION_CODES.Q) - fun voiceOnTouchStop() { - if (Constant.IS_VIDEO_SPEED) { - viewModel.stopSoundMeter() + /** + * 打开或关闭底部导航栏 + */ + fun onSwitchSheet() { + if (binding.mainActivityBottomSheetGroup.visibility == View.VISIBLE) { + binding.mainActivityBottomSheetGroup.visibility = View.GONE + } else { + binding.mainActivityBottomSheetGroup.visibility = View.VISIBLE } } -// override fun onBackPressed() { -// super.onBackPressed() -// } + private fun voiceOnTouchStart() { + viewModel.startSoundMetter(this, binding.mainActivityVoice) + } + + private fun voiceOnTouchStop() { + if (Constant.IS_VIDEO_SPEED) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + viewModel.stopSoundMeter() + } + } + } + + /** + * 打开测评任务面板 + */ + fun onClickTaskFragment() { + if (leftFragment !is TaskManagerFragment) { + if (leftFragment == null) { + binding.mainActivityBottomSheetGroup.visibility = View.VISIBLE + binding.mainActivityLeftFragment.visibility = View.VISIBLE + } + leftFragment = TaskManagerFragment { + binding.mainActivityLeftFragment.visibility = View.GONE + supportFragmentManager.beginTransaction() + .remove(leftFragment!!).commit() + leftFragment = null + null + } + supportFragmentManager.beginTransaction() + .replace(R.id.main_activity_left_fragment, leftFragment!!).commit() + } + } + + /** + * 打开测评结果面板 + */ + fun onClickResFragment() { + if (leftFragment !is QsRecordListFragment) { + if (leftFragment == null) { + binding.mainActivityBottomSheetGroup.visibility = View.VISIBLE + binding.mainActivityLeftFragment.visibility = View.VISIBLE + } + leftFragment = QsRecordListFragment { + binding.mainActivityLeftFragment.visibility = View.GONE + supportFragmentManager.beginTransaction() + .remove(leftFragment!!).commit() + leftFragment = null + null + } + supportFragmentManager.beginTransaction() + .replace(R.id.main_activity_left_fragment, leftFragment!!).commit() + } + } + /** + * 打开离线地图 + */ + fun onClickOfflineMapFragment(){ + if (leftFragment !is OfflineMapFragment) { + if (leftFragment == null) { + binding.mainActivityBottomSheetGroup.visibility = View.VISIBLE + binding.mainActivityLeftFragment.visibility = View.VISIBLE + } + leftFragment = OfflineMapFragment { + binding.mainActivityLeftFragment.visibility = View.GONE + supportFragmentManager.beginTransaction() + .remove(leftFragment!!).commit() + leftFragment = null + null + } + supportFragmentManager.beginTransaction() + .replace(R.id.main_activity_left_fragment, leftFragment!!).commit() + } + } } \ No newline at end of file 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 0e2194cc..c8f575ca 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 @@ -78,6 +78,9 @@ class MainViewModel @Inject constructor( // var testPoint = GeoPoint(0, 0) + //uuid标识,用于记录轨迹组 + val uuid = UUID.randomUUID().toString() + //语音窗体 private var pop: PopupWindow? = null @@ -160,15 +163,9 @@ class MainViewModel @Inject constructor( } private fun initLocation() { - // mapController.locationLayerHandler.setNiLocationListener(NiLocationListener { -// addSaveTrace(it) -// -// }) //用于定位点存储到数据库 viewModelScope.launch(Dispatchers.Default) { mapController.locationLayerHandler.niLocationFlow.collect { location -> -// location.longitude = testPoint.longitude -// location.latitude = testPoint.latitude val geometry = GeometryTools.createGeometry( GeoPoint( location.latitude, location.longitude @@ -186,7 +183,13 @@ class MainViewModel @Inject constructor( location.tiley = y } } - Log.e("jingo", "定位点插入 ${Thread.currentThread().name}") + Log.e("jingo", "定位点插入 ${location.longitude}") + location.groupId = uuid + try { + location.timeStamp = DateTimeUtil.getTime(location.time).toString() + }catch (e: Exception){ + + } traceDataBase.niLocationDao.insert(location) mapController.mMapView.vtmMap.updateMap(true) } @@ -194,8 +197,6 @@ class MainViewModel @Inject constructor( //用于定位点捕捉道路 viewModelScope.launch(Dispatchers.Default) { mapController.locationLayerHandler.niLocationFlow.collectLatest { location -> -// location.longitude = testPoint.longitude -// location.latitude = testPoint.latitude if (!isSelectRoad()) captureLink(GeoPoint(location.latitude, location.longitude)) } } @@ -292,9 +293,10 @@ class MainViewModel @Inject constructor( } linkIdCache = linkId ?: "" Log.e("jingo", "自动捕捉数据 共${signList.size}条") - } else { - mapController.lineHandler.removeLine() } + }else{ + mapController.lineHandler.removeLine() + linkIdCache = "" } } } 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 new file mode 100644 index 00000000..c882bb55 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt @@ -0,0 +1,250 @@ +package com.navinfo.omqs.ui.fragment.console + +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.View.OnClickListener +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.transition.AutoTransition +import androidx.transition.Scene +import androidx.transition.TransitionManager +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 +class ConsoleFragment : BaseFragment(), OnClickListener { + + private var _binding: FragmentConsoleBinding? = null + private val binding get() = _binding!! + private var sceneFlag = true + private val aTransition = AutoTransition() + private val bTransition = AutoTransition() + private var mFragment: Fragment? = null + private val fragmentId = R.id.console_fragment + + // 创建a场景 + private val aScene by lazy { + Scene.getSceneForLayout( + binding.consoleRoot, R.layout.console_on, requireContext() + ) + } + + // 创建b场景 + private val bScene by lazy { + Scene.getSceneForLayout( + binding.consoleRoot, R.layout.console_off, requireContext() + ) + } + +// private val mTransitionAManager: TransitionManager by lazy { +// TransitionInflater.from(this) +// .inflateTransitionManager(R.transition.transitionmanager_console, binding.consoleRoot) +// } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + _binding = FragmentConsoleBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + aTransition.addListener(object : androidx.transition.Transition.TransitionListener { + override fun onTransitionStart(transition: androidx.transition.Transition) { + sceneFlag = true + if (mFragment != null) { + Log.e("jingo", "动画开始B mFragment 不为null") + childFragmentManager.beginTransaction().remove(mFragment!!).commit() + mFragment = null + } + } + + override fun onTransitionEnd(transition: androidx.transition.Transition) { + Log.e("jingo", "动画A结束") + initOnClickListener() + } + + override fun onTransitionCancel(transition: androidx.transition.Transition) { + } + + override fun onTransitionPause(transition: androidx.transition.Transition) { + } + + override fun onTransitionResume(transition: androidx.transition.Transition) { + } + + }) + bTransition.addListener(object : androidx.transition.Transition.TransitionListener { + override fun onTransitionStart(transition: androidx.transition.Transition) { + sceneFlag = false + if (mFragment != null) { + Log.e("jingo", "动画开始A mFragment 不为null") + childFragmentManager.beginTransaction().replace(fragmentId, mFragment!!) + .commit() + } + } + + override fun onTransitionEnd(transition: androidx.transition.Transition) { + initOnClickListener() + } + + override fun onTransitionCancel(transition: androidx.transition.Transition) { + } + + override fun onTransitionPause(transition: androidx.transition.Transition) { + } + + override fun onTransitionResume(transition: androidx.transition.Transition) { + } + + }) + initOnClickListener() + } + + + /** + * 设置点击事件 + */ + private fun initOnClickListener() { + /** + * 地图按钮 + */ + binding.consoleRoot.findViewById(R.id.console_map_icon_bg)?.setOnClickListener( + this + ) + binding.consoleRoot.findViewById(R.id.console_map_bg)?.setOnClickListener(this) + /** + * 离线地图按钮 + */ + binding.consoleRoot.findViewById(R.id.console_offline_map_icon_bg) + ?.setOnClickListener(this) + binding.consoleRoot.findViewById(R.id.console_offline_map_bg) + ?.setOnClickListener(this) + /** + * 图层设置按钮 + */ + binding.consoleRoot.findViewById(R.id.console_layer_setting_icon_bg) + ?.setOnClickListener(this) + binding.consoleRoot.findViewById(R.id.console_layer_setting_bg) + ?.setOnClickListener(this) + /** + * 个人中心 + */ + binding.consoleRoot.findViewById(R.id.console_personal_center_icon_bg) + ?.setOnClickListener(this) + binding.consoleRoot.findViewById(R.id.console_personal_center_bg) + ?.setOnClickListener(this) + /** + * 测评结果列表 + */ + binding.consoleRoot.findViewById(R.id.console_evaluation_icon_bg) + ?.setOnClickListener(this) + binding.consoleRoot.findViewById(R.id.console_evaluation_bg)?.setOnClickListener(this) + /** + * 评测任务 + */ + binding.consoleRoot.findViewById(R.id.console_task_bg)?.setOnClickListener(this) + binding.consoleRoot.findViewById(R.id.console_task_icon_bg)?.setOnClickListener(this) + } + + override fun onDestroy() { + super.onDestroy() + _binding = null + } + + override fun onClick(v: View?) { + v?.let { + when (it.id) { + /** + * 地图点击事件 + */ + R.id.console_map_bg, R.id.console_map_icon_bg -> { + activity?.let { a -> + a.supportFragmentManager.beginTransaction().remove(this).commit() + } + } + /** + * 离线地图点击 + */ + R.id.console_offline_map_icon_bg, R.id.console_offline_map_bg -> { + activity?.let { a -> + a.supportFragmentManager.beginTransaction().remove(this).commit() + (a as MainActivity).onClickOfflineMapFragment() + } + + } + /** + * 个人中心点击 + */ + R.id.console_personal_center_bg, R.id.console_personal_center_icon_bg -> { + if (sceneFlag) { + mFragment = PersonalCenterFragment { + TransitionManager.go(aScene, aTransition) + } + sceneFlag = false + TransitionManager.go(bScene, bTransition) + } else { + if (mFragment !is PersonalCenterFragment) { + mFragment = PersonalCenterFragment { + TransitionManager.go(aScene, aTransition) + } + childFragmentManager.beginTransaction().replace(fragmentId, mFragment!!) + .commit() + } + return + } + } + /** + * 图层设置 + */ + R.id.console_layer_setting_bg, R.id.console_layer_setting_icon_bg -> { + if (sceneFlag) { + mFragment = LayerManagerFragment { + TransitionManager.go(aScene, aTransition) + } + sceneFlag = false + TransitionManager.go(bScene, bTransition) + } else { + if (mFragment !is LayerManagerFragment) { + mFragment = LayerManagerFragment { + TransitionManager.go(aScene, aTransition) + } + childFragmentManager.beginTransaction().replace(fragmentId, mFragment!!) + .commit() + } + return + } + } + /** + * 测评结果列表 + */ + R.id.console_evaluation_icon_bg, R.id.console_evaluation_bg -> { + activity?.let { a -> + a.supportFragmentManager.beginTransaction().remove(this).commit() + (a as MainActivity).onClickResFragment() + } + } + R.id.console_task_icon_bg, R.id.console_task_bg -> { + activity?.let { a -> + a.supportFragmentManager.beginTransaction().remove(this).commit() + (a as MainActivity).onClickTaskFragment() + } + + } + else -> {} + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt index f44a8f3c..d2f0ccae 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt @@ -93,29 +93,26 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener { } - binding.evaluationVoice.setOnTouchListener(object : View.OnTouchListener { - @RequiresApi(Build.VERSION_CODES.Q) - override fun onTouch(v: View?, event: MotionEvent?): Boolean { - Log.e("qj", event?.action.toString()) - when (event?.action) { - MotionEvent.ACTION_DOWN -> { - voiceOnTouchStart()//Do Something - Log.e("qj", "voiceOnTouchStart") - } - - MotionEvent.ACTION_UP -> { - voiceOnTouchStop()//Do Something - Log.e("qj", "ACTION_UP") - } - - MotionEvent.ACTION_CANCEL -> { - voiceOnTouchStop()//Do Something - Log.e("qj", "ACTION_CANCEL") - } + binding.evaluationVoice.setOnTouchListener { _, event -> + Log.e("qj", event?.action.toString()) + when (event?.action) { + MotionEvent.ACTION_DOWN -> { + voiceOnTouchStart()//Do Something + Log.e("qj", "voiceOnTouchStart") + } + + MotionEvent.ACTION_UP -> { + voiceOnTouchStop()//Do Something + Log.e("qj", "ACTION_UP") + } + + MotionEvent.ACTION_CANCEL -> { + voiceOnTouchStop()//Do Something + Log.e("qj", "ACTION_CANCEL") } - return true } - }) + true + } /** * 读取元数据 @@ -308,15 +305,16 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener { } } - fun voiceOnTouchStart() { + private fun voiceOnTouchStart() { viewModel.startSoundMetter(requireActivity(), binding.evaluationVoice) } - @RequiresApi(Build.VERSION_CODES.Q) - fun voiceOnTouchStop() { + private fun voiceOnTouchStop() { Log.e("qj", "voiceOnTouchStop====${Constant.IS_VIDEO_SPEED}") if (Constant.IS_VIDEO_SPEED) { - viewModel.stopSoundMeter() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + viewModel.stopSoundMeter() + } } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerFragment.kt similarity index 68% rename from app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt rename to app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerFragment.kt index ba11a236..b9c14e46 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerFragment.kt @@ -4,22 +4,17 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels -import androidx.navigation.fragment.findNavController -import com.blankj.utilcode.util.SPStaticUtils -import com.navinfo.omqs.Constant -import com.navinfo.omqs.databinding.FragmentEmptyBinding import com.navinfo.omqs.databinding.FragmentLayerManagerBinding import com.navinfo.omqs.ui.fragment.BaseFragment -import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapCityListViewModel -class LayermanagerFragment : BaseFragment(){ +class LayerManagerFragment(private var backListener: (() -> Unit?)? = null) : BaseFragment() { private var _binding: FragmentLayerManagerBinding? = null private val binding get() = _binding!! private val viewModel by viewModels() -// private val viewModel by lazy { viewModels().value} + + // private val viewModel by lazy { viewModels().value} override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -30,12 +25,13 @@ class LayermanagerFragment : BaseFragment(){ override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val adapter = LayerManagerExpandableListAdapter(requireContext(), viewModel.getLayerConfigList()) + val adapter = + LayerManagerExpandableListAdapter(requireContext(), viewModel.getLayerConfigList()) binding.elvLayerManager.setAdapter(adapter) // 默认显示第一个父项下的子类 binding.elvLayerManager.expandGroup(0) binding.elvLayerManager.setGroupIndicator(null) - binding.elvLayerManager.setOnGroupClickListener { expandableListView, view, groupPosition, l -> + binding.elvLayerManager.setOnGroupClickListener { expandableListView, _, groupPosition, _ -> if (expandableListView.isGroupExpanded(groupPosition)) { binding.elvLayerManager.collapseGroup(groupPosition) } else { @@ -43,14 +39,19 @@ class LayermanagerFragment : BaseFragment(){ } } - binding.imgBack.setOnClickListener { - findNavController().navigateUp() + binding.imgConfirm.setOnClickListener { + viewModel.saveLayerConfigList(requireContext(), adapter.parentItems) } - binding.tvTitle.text = findNavController().currentDestination?.label + binding.imgBack.setOnClickListener { + backListener?.invoke() + } + + binding.tvTitle.text = "图层管理"//findNavController().currentDestination?.label binding.imgConfirm.setOnClickListener { // 用户点击确认,重新设置当前的图层显隐控制 - viewModel.saveLayerConfigList(adapter.parentItems) + viewModel.saveLayerConfigList(requireContext(), adapter.parentItems) + backListener?.invoke() } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt index 82861c12..0e889dbd 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt @@ -1,19 +1,20 @@ package com.navinfo.omqs.ui.fragment.layermanager +import android.content.Context +import android.widget.Toast import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.blankj.utilcode.util.FileIOUtils import com.blankj.utilcode.util.SPStaticUtils import com.google.gson.Gson -import com.google.gson.reflect.TypeToken import com.navinfo.omqs.Constant import com.navinfo.omqs.bean.ImportConfig import com.navinfo.omqs.tools.LayerConfigUtils import com.navinfo.omqs.util.FlowEventBus +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import java.io.File +import kotlinx.coroutines.withContext -class LayerManagerViewModel(): ViewModel() { +class LayerManagerViewModel() : ViewModel() { private val gson = Gson() fun getLayerConfigList(): List { @@ -21,11 +22,15 @@ class LayerManagerViewModel(): ViewModel() { return LayerConfigUtils.getLayerConfigList() } - fun saveLayerConfigList(listData: List) { + fun saveLayerConfigList(context: Context, listData: List) { SPStaticUtils.put(Constant.EVENT_LAYER_MANAGER_CHANGE, gson.toJson(listData)) // 发送新的配置数据 viewModelScope.launch { FlowEventBus.post(Constant.EVENT_LAYER_MANAGER_CHANGE, listData) + withContext(Dispatchers.Main) { + Toast.makeText(context, "设置成功", Toast.LENGTH_SHORT) + .show() + } } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapFragment.kt index c04ceb9d..2e8d7ac3 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/offlinemap/OfflineMapFragment.kt @@ -13,7 +13,8 @@ import com.navinfo.omqs.ui.fragment.BaseFragment /** * 离线地图总页面 */ -class OfflineMapFragment : BaseFragment() { +class OfflineMapFragment(private var backListener: (() -> Unit?)? = null) : + BaseFragment() { private var _binding: FragmentOfflineMapBinding? = null @@ -48,7 +49,7 @@ class OfflineMapFragment : BaseFragment() { //处理返回按钮 binding.offlineMapBack.setOnClickListener { - findNavController().popBackStack() + backListener?.invoke() } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt index 73673d83..2b9d9d43 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt @@ -29,7 +29,8 @@ import javax.inject.Inject * 个人中心 */ @AndroidEntryPoint -class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks { +class PersonalCenterFragment(private var backListener: (() -> Unit?)? = null) : BaseFragment(), + FSAFActivityCallbacks { private var _binding: FragmentPersonalCenterBinding? = null private val binding get() = _binding!! diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListFragment.kt index e4fb1819..30d52e77 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListFragment.kt @@ -16,7 +16,7 @@ import com.navinfo.omqs.ui.fragment.tasklist.QsRecordListAdapter import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class QsRecordListFragment : BaseFragment(){ +class QsRecordListFragment(private var backListener: (() -> Unit?)? = null) : BaseFragment() { private var _binding: FragmentQsRecordListBinding? = null private val viewModel by viewModels() private val binding get() = _binding!! @@ -44,7 +44,7 @@ class QsRecordListFragment : BaseFragment(){ binding.qsRecyclerview.adapter = adapter viewModel.liveDataQSList.observe(viewLifecycleOwner) { adapter.refreshData(it) - binding.tvTitleCount.text = "共"+adapter.data.size+"条" + binding.tvTitleCount.text = "共" + adapter.data.size + "条" } val itemDecoration = DividerItemDecoration(context, DividerItemDecoration.VERTICAL) itemDecoration.setDrawable(resources.getDrawable(R.drawable.separator)) @@ -53,13 +53,13 @@ class QsRecordListFragment : BaseFragment(){ // itemClick adapter.setOnKotlinItemClickListener(object : QsRecordListAdapter.IKotlinItemClickListener { override fun onItemClickListener(position: Int) { - viewModel.onItemClickListener(activity as MainActivity,position) - findNavController().popBackStack() + viewModel.onItemClickListener(activity as MainActivity, position) + backListener?.invoke() } }) - binding.imgBack.setOnClickListener{ - findNavController().navigateUp() + binding.imgBack.setOnClickListener { + backListener?.invoke() } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt index e7d00a93..502b8ae3 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt @@ -9,6 +9,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.EditText +import android.widget.Toast import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -40,7 +41,11 @@ class TaskFragment : BaseFragment() { private val adapter: TaskAdapter by lazy { TaskAdapter(object : TaskAdapterCallback { override fun itemOnClick(bean: HadLinkDvoBean) { - viewModel.showCurrentLink(bean) + if(bean!=null){ + viewModel.showCurrentLink(bean) + }else{ + Toast.makeText(context, "数据错误,无法显示!", Toast.LENGTH_SHORT).show() + } } override fun editOnclick(position: Int, bean: HadLinkDvoBean) { 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 a574fafa..9530ea95 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 @@ -5,6 +5,7 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.lifecycle.Observer import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.omqs.R @@ -35,18 +36,24 @@ class TaskListAdapter( val downloadBtnClick = View.OnClickListener() { if (it.tag != null) { val taskBean = data[it.tag as Int] - when (taskBean.status) { - FileDownloadStatus.NONE, FileDownloadStatus.UPDATE, FileDownloadStatus.PAUSE, FileDownloadStatus.IMPORT, FileDownloadStatus.ERROR -> { - Log.e("jingo", "开始下载 ${taskBean.status}") - downloadManager.start(taskBean.id) - } - FileDownloadStatus.LOADING, FileDownloadStatus.WAITING -> { - Log.e("jingo", "暂停 ${taskBean.status}") - downloadManager.pause(taskBean.id) - } - else -> { - Log.e("jingo", "暂停 ${taskBean.status}") + if (taskBean.hadLinkDvoList.isNotEmpty()) { + when (taskBean.status) { + FileDownloadStatus.NONE, FileDownloadStatus.UPDATE, FileDownloadStatus.PAUSE, FileDownloadStatus.IMPORT, FileDownloadStatus.ERROR -> { + Log.e("jingo", "开始下载 ${taskBean.status}") + downloadManager.start(taskBean.id) + } + + FileDownloadStatus.LOADING, FileDownloadStatus.WAITING -> { + Log.e("jingo", "暂停 ${taskBean.status}") + downloadManager.pause(taskBean.id) + } + + else -> { + Log.e("jingo", "暂停 ${taskBean.status}") + } } + } else { + Toast.makeText(downloadManager.context, "数据错误,无Link信息,无法执行下载!", Toast.LENGTH_LONG).show() } } } @@ -55,10 +62,14 @@ class TaskListAdapter( if (it.tag != null) { val taskBean = data[it.tag as Int] Log.e("jingo", "开始上传 ${taskBean.syncStatus}") - when (taskBean.syncStatus) { - FileUploadStatus.NONE, FileUploadStatus.ERROR, FileUploadStatus.WAITING -> { - uploadManager.start(taskBean.id) + if (taskBean.hadLinkDvoList.isNotEmpty()) { + when (taskBean.syncStatus) { + FileUploadStatus.NONE, FileUploadStatus.UPLOADING, FileUploadStatus.ERROR, FileUploadStatus.WAITING -> { + uploadManager.start(taskBean.id) + } } + }else{ + Toast.makeText(uploadManager.context, "数据错误,无Link信息,无法执行同步!", Toast.LENGTH_LONG).show() } } } @@ -159,19 +170,23 @@ class TaskListAdapter( binding.taskUploadBtn.setProgress(0) binding.taskUploadBtn.setBackgroundColor(binding.root.resources.getColor(R.color.ripple_end_color)) } + FileUploadStatus.ERROR -> { binding.taskUploadBtn.stopAnimator() binding.taskUploadBtn.setText("重新同步") binding.taskUploadBtn.setProgress(100) } + FileUploadStatus.NONE -> { binding.taskUploadBtn.setText("未上传") binding.taskUploadBtn.setProgress(0) } + FileUploadStatus.WAITING -> { binding.taskUploadBtn.setText("等待同步") binding.taskUploadBtn.setProgress(100) } + FileUploadStatus.UPLOADING -> { binding.taskUploadBtn.setText("上传中") binding.taskUploadBtn.setProgress(100) @@ -202,26 +217,31 @@ class TaskListAdapter( View.INVISIBLE binding.taskDownloadBtn.setText("下载") } + FileDownloadStatus.WAITING -> { if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE binding.taskDownloadBtn.setText("等待中") } + FileDownloadStatus.LOADING -> { if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE binding.taskDownloadBtn.setText("暂停") } + FileDownloadStatus.PAUSE -> { if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE binding.taskDownloadBtn.setText("继续") } + FileDownloadStatus.ERROR -> { if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE binding.taskDownloadBtn.setText("重试") } + FileDownloadStatus.DONE -> { if (binding.taskProgressText.visibility == View.VISIBLE) binding.taskProgressText.visibility = View.INVISIBLE @@ -229,11 +249,13 @@ class TaskListAdapter( binding.taskDownloadBtn.visibility = View.INVISIBLE binding.taskUploadBtn.visibility = View.VISIBLE } + FileDownloadStatus.UPDATE -> { if (binding.taskProgressText.visibility == View.VISIBLE) binding.taskProgressText.visibility = View.INVISIBLE binding.taskDownloadBtn.setText("更新") } + FileDownloadStatus.IMPORTING -> { if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE @@ -251,7 +273,12 @@ class TaskListAdapter( } else { binding.taskProgressText.text = "0%" } + val errMsg = taskBean.errMsg + if (errMsg != null && errMsg.isNotEmpty()) { + Toast.makeText(binding.taskProgressText.context, errMsg, Toast.LENGTH_LONG).show() + } } + FileDownloadStatus.IMPORT -> { if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.INVISIBLE diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListFragment.kt index fc9c5780..7670904d 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListFragment.kt @@ -6,8 +6,7 @@ import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.viewModels -import androidx.navigation.fragment.findNavController +import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import com.navinfo.omqs.databinding.FragmentTaskListBinding import com.navinfo.omqs.http.taskdownload.TaskDownloadManager @@ -35,7 +34,10 @@ class TaskListFragment : BaseFragment() { private val adapter: TaskListAdapter by lazy { TaskListAdapter( downloadManager, uploadManager - ) { position, taskBean -> + ) { _, taskBean -> + if(taskBean.hadLinkDvoList.isEmpty()){ + Toast.makeText(context, "数据错误,无Link数据!", Toast.LENGTH_SHORT).show() + } viewModel.setSelectTaskBean(taskBean) } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskManagerFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskManagerFragment.kt index 8c74cdfc..ec11bd80 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskManagerFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskManagerFragment.kt @@ -15,7 +15,7 @@ import dagger.hilt.android.AndroidEntryPoint * 评测任务viewpager管理页面 */ @AndroidEntryPoint -class TaskManagerFragment : BaseFragment() { +class TaskManagerFragment(private var backListener: ((TaskManagerFragment) -> Unit?)? = null) : BaseFragment() { private var _binding: FragmentTaskManagerBinding? = null private val binding get() = _binding!! @@ -53,7 +53,7 @@ class TaskManagerFragment : BaseFragment() { }.attach() viewModel.getTaskList(requireContext()) binding.taskBack.setOnClickListener { - findNavController().navigateUp() + backListener?.invoke(this) } } 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 d166ce76..3bf42632 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 @@ -19,6 +19,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import io.realm.Realm import kotlinx.coroutines.* import javax.inject.Inject +import kotlin.math.max @HiltViewModel @@ -143,30 +144,37 @@ class TaskViewModel @Inject constructor( liveDataTaskLinks.value = taskBean.hadLinkDvoList if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mapController.lineHandler.omdbTaskLinkLayer.removeAll() - mapController.lineHandler.omdbTaskLinkLayer.addLineList(taskBean.hadLinkDvoList) - var maxX = 0.0 - var maxY = 0.0 - var minX = 0.0 - var minY = 0.0 - for (item in taskBean.hadLinkDvoList) { - val geometry = GeometryTools.createGeometry(item.geometry) - val envelope = geometry.envelopeInternal - if (envelope.maxX > maxX) { - maxX = envelope.maxX + if(taskBean.hadLinkDvoList.isNotEmpty()){ + mapController.lineHandler.omdbTaskLinkLayer.addLineList(taskBean.hadLinkDvoList) + var maxX = 0.0 + var maxY = 0.0 + var minX = 0.0 + var minY = 0.0 + for (item in taskBean.hadLinkDvoList) { + val geometry = GeometryTools.createGeometry(item.geometry) + if(geometry!=null){ + val envelope = geometry.envelopeInternal + if (envelope.maxX > maxX) { + maxX = envelope.maxX + } + if (envelope.maxY > maxY) { + maxY = envelope.maxY + } + if (envelope.minX < minX || minX == 0.0) { + minX = envelope.minX + } + if (envelope.minY < minY || minY == 0.0) { + minY = envelope.minY + } + } } - if (envelope.maxY > maxY) { - maxY = envelope.maxY - } - if (envelope.minX < minX || minX == 0.0) { - minX = envelope.minX - } - if (envelope.minY < minY || minY == 0.0) { - minY = envelope.minY + //增加异常数据判断 + if(maxX!=0.0&&maxY!=0.0&&minX!=0.0&&minY!=0.0){ + mapController.animationHandler.animateToBox( + maxX = maxX, maxY = maxY, minX = minX, minY = minY + ) } } - mapController.animationHandler.animateToBox( - maxX = maxX, maxY = maxY, minX = minX, minY = minY - ) } } @@ -177,13 +185,15 @@ class TaskViewModel @Inject constructor( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mapController.lineHandler.omdbTaskLinkLayer.showSelectLine(link) val geometry = GeometryTools.createGeometry(link.geometry) - val envelope = geometry.envelopeInternal - mapController.animationHandler.animateToBox( - maxX = envelope.maxX, - maxY = envelope.maxY, - minX = envelope.minX, - minY = envelope.minY - ) + if(geometry!=null){ + val envelope = geometry.envelopeInternal + mapController.animationHandler.animateToBox( + maxX = envelope.maxX, + maxY = envelope.maxY, + minX = envelope.minX, + minY = envelope.minY + ) + } } } diff --git a/app/src/main/res/drawable-v24/baseline_minimize_24.xml b/app/src/main/res/drawable-v24/baseline_minimize_24.xml new file mode 100644 index 00000000..73c835c2 --- /dev/null +++ b/app/src/main/res/drawable-v24/baseline_minimize_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable-xxhdpi/console_bg.jpg b/app/src/main/res/drawable-xxhdpi/console_bg.jpg new file mode 100644 index 00000000..a7b0e3d7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/console_bg.jpg differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_camera.png b/app/src/main/res/drawable-xxhdpi/icon_console_camera.png new file mode 100644 index 00000000..ed8a404f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_camera.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_evaluation.png b/app/src/main/res/drawable-xxhdpi/icon_console_evaluation.png new file mode 100644 index 00000000..9caa89d0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_evaluation.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_layer_setting.png b/app/src/main/res/drawable-xxhdpi/icon_console_layer_setting.png new file mode 100644 index 00000000..506a2a59 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_layer_setting.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_location.png b/app/src/main/res/drawable-xxhdpi/icon_console_location.png new file mode 100644 index 00000000..5fdc0d86 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_location.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_map.png b/app/src/main/res/drawable-xxhdpi/icon_console_map.png new file mode 100644 index 00000000..b1c8c23d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_map.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_offline_map.png b/app/src/main/res/drawable-xxhdpi/icon_console_offline_map.png new file mode 100644 index 00000000..0d5dafb1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_offline_map.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_personal_center.png b/app/src/main/res/drawable-xxhdpi/icon_console_personal_center.png new file mode 100644 index 00000000..49256d4c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_personal_center.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_route.png b/app/src/main/res/drawable-xxhdpi/icon_console_route.png new file mode 100644 index 00000000..024a8c98 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_route.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_task.png b/app/src/main/res/drawable-xxhdpi/icon_console_task.png new file mode 100644 index 00000000..b7465a5f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_task.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_console_track.png b/app/src/main/res/drawable-xxhdpi/icon_console_track.png new file mode 100644 index 00000000..376503ee Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_console_track.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_main_bottom_home.png b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_home.png new file mode 100644 index 00000000..5b5ad319 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_home.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_main_bottom_offline_map.png b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_offline_map.png new file mode 100644 index 00000000..3ca4ce2b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_offline_map.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_main_bottom_res.png b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_res.png new file mode 100644 index 00000000..e14eff80 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_res.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_main_bottom_route.png b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_route.png new file mode 100644 index 00000000..38b06d45 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_route.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_main_bottom_task.png b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_task.png new file mode 100644 index 00000000..a9942030 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_main_bottom_task.png differ diff --git a/app/src/main/res/drawable/shape_bottom_sheet.xml b/app/src/main/res/drawable/shape_bottom_sheet.xml new file mode 100644 index 00000000..3fa8cf1c --- /dev/null +++ b/app/src/main/res/drawable/shape_bottom_sheet.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_btn_video_normal.xml b/app/src/main/res/drawable/shape_btn_video_normal.xml index 6dcd6f1a..7e3588a7 100644 --- a/app/src/main/res/drawable/shape_btn_video_normal.xml +++ b/app/src/main/res/drawable/shape_btn_video_normal.xml @@ -3,7 +3,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_console_track_bg.xml b/app/src/main/res/drawable/shape_console_track_bg.xml new file mode 100644 index 00000000..a99ddb17 --- /dev/null +++ b/app/src/main/res/drawable/shape_console_track_bg.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_oval_black_bg.xml b/app/src/main/res/drawable/shape_oval_black_bg.xml new file mode 100644 index 00000000..cefe3e3a --- /dev/null +++ b/app/src/main/res/drawable/shape_oval_black_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_oval_gray_bg.xml b/app/src/main/res/drawable/shape_oval_gray_bg.xml new file mode 100644 index 00000000..810d4a21 --- /dev/null +++ b/app/src/main/res/drawable/shape_oval_gray_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_oval_gray_hex_bg.xml b/app/src/main/res/drawable/shape_oval_gray_hex_bg.xml new file mode 100644 index 00000000..67b436d1 --- /dev/null +++ b/app/src/main/res/drawable/shape_oval_gray_hex_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_rect_black_8dp_bg.xml b/app/src/main/res/drawable/shape_rect_black_8dp_bg.xml new file mode 100644 index 00000000..9e391212 --- /dev/null +++ b/app/src/main/res/drawable/shape_rect_black_8dp_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index bb17c8e4..690d0642 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -17,265 +17,397 @@ type="com.navinfo.omqs.ui.activity.map.MainViewModel" /> - + android:layout_height="match_parent"> - + - + + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + android:layout_width="wrap_content" + android:layout_height="0dp" + android:elevation="3dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:navGraph="@navigation/right_fragment_nav_graph" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_sign.xml b/app/src/main/res/layout/adapter_sign.xml index 4b4dacc8..98d10cb5 100644 --- a/app/src/main/res/layout/adapter_sign.xml +++ b/app/src/main/res/layout/adapter_sign.xml @@ -27,7 +27,7 @@ android:gravity="center" android:text="80" android:textColor="#2F2F2F" - android:textSize="14sp" /> + android:textSize="16sp" /> + android:textSize="12sp" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/console_on.xml b/app/src/main/res/layout/console_on.xml new file mode 100644 index 00000000..86beb031 --- /dev/null +++ b/app/src/main/res/layout/console_on.xml @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_console.xml b/app/src/main/res/layout/fragment_console.xml new file mode 100644 index 00000000..c6f55518 --- /dev/null +++ b/app/src/main/res/layout/fragment_console.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_layer_manager.xml b/app/src/main/res/layout/fragment_layer_manager.xml index a70aafe6..78f91573 100644 --- a/app/src/main/res/layout/fragment_layer_manager.xml +++ b/app/src/main/res/layout/fragment_layer_manager.xml @@ -1,64 +1,68 @@ + android:layout_height="match_parent" + android:background="@color/bg_left_pannel" + android:orientation="vertical"> + + + app:layout_constraintTop_toTopOf="parent"> + + + + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="5dp" + android:background="@drawable/selector_bg_round_button" + android:foreground="@drawable/ripple_btn_press" + android:src="@drawable/ic_baseline_check_24" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - + app:layout_constraintTop_toTopOf="parent"> + + app:layout_constraintTop_toBottomOf="@id/title_layout"> + + android:layout_height="match_parent" + android:divider="@android:drawable/divider_horizontal_dim_dark" + android:dividerHeight="0.1dp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_offline_map.xml b/app/src/main/res/layout/fragment_offline_map.xml index 740710dd..7b0bed8c 100644 --- a/app/src/main/res/layout/fragment_offline_map.xml +++ b/app/src/main/res/layout/fragment_offline_map.xml @@ -7,92 +7,72 @@ android:background="@color/bg_left_pannel" tools:context=".ui.fragment.offlinemap.OfflineMapFragment"> - + android:layout_marginTop="5dp" + android:background="@drawable/selector_bg_round_button" + android:foreground="@drawable/ripple_btn_press" + android:src="@drawable/ic_baseline_keyboard_arrow_left_24" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + + + + + android:text="下载管理" /> - - - + android:text="城市列表" /> + - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@id/offline_map_tab_layout" /> - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_offline_map_city_list.xml b/app/src/main/res/layout/fragment_offline_map_city_list.xml index 80b9409b..3f710dc6 100644 --- a/app/src/main/res/layout/fragment_offline_map_city_list.xml +++ b/app/src/main/res/layout/fragment_offline_map_city_list.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@drawable/shape_rect_white_6dp_bg" android:padding="@dimen/default_widget_padding" tools:context=".ui.fragment.offlinemap.OfflineMapCityListFragment"> diff --git a/app/src/main/res/layout/fragment_qs_record_list.xml b/app/src/main/res/layout/fragment_qs_record_list.xml index 863b4fb0..8d22ee53 100644 --- a/app/src/main/res/layout/fragment_qs_record_list.xml +++ b/app/src/main/res/layout/fragment_qs_record_list.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/bg_left_pannel" + android:background="@drawable/shape_rect_white_6dp_bg" tools:context=".ui.fragment.qsrecordlist.QsRecordListFragment"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/left_drawer_nav_graph.xml b/app/src/main/res/navigation/left_drawer_nav_graph.xml index 2e2c94b3..81d0f6be 100644 --- a/app/src/main/res/navigation/left_drawer_nav_graph.xml +++ b/app/src/main/res/navigation/left_drawer_nav_graph.xml @@ -39,7 +39,7 @@ diff --git a/app/src/main/res/transition/transitionmanager_console.xml b/app/src/main/res/transition/transitionmanager_console.xml new file mode 100644 index 00000000..5a4b72c6 --- /dev/null +++ b/app/src/main/res/transition/transitionmanager_console.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/transition/transitionset_console_on.xml b/app/src/main/res/transition/transitionset_console_on.xml new file mode 100644 index 00000000..b2c18be1 --- /dev/null +++ b/app/src/main/res/transition/transitionset_console_on.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 9e404f83..22fa5ffc 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -40,5 +40,5 @@ 230dp 28dp 213dp - + 32dp \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ad37daa4..d0a4d202 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,5 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4002_1.png b/collect-library/src/main/assets/omdb/icon_4002_1.png deleted file mode 100644 index db1014da..00000000 Binary files a/collect-library/src/main/assets/omdb/icon_4002_1.png and /dev/null differ diff --git a/collect-library/src/main/assets/omdb/icon_4002_1.svg b/collect-library/src/main/assets/omdb/icon_4002_1.svg new file mode 100644 index 00000000..158b4f48 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_4002_1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4003_0.png b/collect-library/src/main/assets/omdb/icon_4003_0.png deleted file mode 100644 index 747e7357..00000000 Binary files a/collect-library/src/main/assets/omdb/icon_4003_0.png and /dev/null differ diff --git a/collect-library/src/main/assets/omdb/icon_4003_0.svg b/collect-library/src/main/assets/omdb/icon_4003_0.svg new file mode 100644 index 00000000..50a7b3b7 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_4003_0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4003_1.png b/collect-library/src/main/assets/omdb/icon_4003_1.png deleted file mode 100644 index 4b798ec4..00000000 Binary files a/collect-library/src/main/assets/omdb/icon_4003_1.png and /dev/null differ diff --git a/collect-library/src/main/assets/omdb/icon_4003_1.svg b/collect-library/src/main/assets/omdb/icon_4003_1.svg new file mode 100644 index 00000000..9254e9c0 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_4003_1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4004_0.png b/collect-library/src/main/assets/omdb/icon_4004_0.png deleted file mode 100644 index 889aabb6..00000000 Binary files a/collect-library/src/main/assets/omdb/icon_4004_0.png and /dev/null differ diff --git a/collect-library/src/main/assets/omdb/icon_4004_0.svg b/collect-library/src/main/assets/omdb/icon_4004_0.svg new file mode 100644 index 00000000..54de0465 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_4004_0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4004_1.png b/collect-library/src/main/assets/omdb/icon_4004_1.png deleted file mode 100644 index f152c1f1..00000000 Binary files a/collect-library/src/main/assets/omdb/icon_4004_1.png and /dev/null differ diff --git a/collect-library/src/main/assets/omdb/icon_4006_0.png b/collect-library/src/main/assets/omdb/icon_4006_0.png deleted file mode 100644 index 5c912a60..00000000 Binary files a/collect-library/src/main/assets/omdb/icon_4006_0.png and /dev/null differ diff --git a/collect-library/src/main/assets/omdb/icon_4006_0.svg b/collect-library/src/main/assets/omdb/icon_4006_0.svg new file mode 100644 index 00000000..f5b3b3c5 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_4006_0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_4022_0.png b/collect-library/src/main/assets/omdb/icon_4022_0.png deleted file mode 100644 index a718c8e2..00000000 Binary files a/collect-library/src/main/assets/omdb/icon_4022_0.png and /dev/null differ diff --git a/collect-library/src/main/assets/omdb/icon_4022_0.svg b/collect-library/src/main/assets/omdb/icon_4022_0.svg new file mode 100644 index 00000000..63378323 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_4022_0.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_arrow_right.png b/collect-library/src/main/assets/omdb/icon_arrow_right.png deleted file mode 100644 index b0246785..00000000 Binary files a/collect-library/src/main/assets/omdb/icon_arrow_right.png and /dev/null differ diff --git a/collect-library/src/main/assets/omdb/icon_arrow_right.svg b/collect-library/src/main/assets/omdb/icon_arrow_right.svg new file mode 100644 index 00000000..fc0678f3 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_arrow_right.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/TraceDataBase.java b/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/TraceDataBase.java index 99e861bd..ba6195d1 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/TraceDataBase.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/TraceDataBase.java @@ -8,6 +8,7 @@ import androidx.annotation.NonNull; import androidx.room.Database; import androidx.room.Room; import androidx.room.RoomDatabase; +import androidx.room.migration.Migration; import androidx.sqlite.db.SupportSQLiteDatabase; import com.navinfo.collect.library.data.entity.NiLocation; @@ -18,7 +19,7 @@ import com.tencent.wcdb.repair.RecoverKit; import com.tencent.wcdb.room.db.WCDBDatabase; import com.tencent.wcdb.room.db.WCDBOpenHelperFactory; -@Database(entities = { NiLocation.class},version = 1, exportSchema = false) +@Database(entities = { NiLocation.class},version = 2, exportSchema = false) public abstract class TraceDataBase extends RoomDatabase { // marking the instance as volatile to ensure atomic access to the variable /** @@ -63,7 +64,7 @@ public abstract class TraceDataBase extends RoomDatabase { // Wipes and rebuilds instead of migrating if no Migration object. // Migration is not part of this codelab. .fallbackToDestructiveMigration() - .addCallback(sRoomDatabaseCallback) + .addCallback(sRoomDatabaseCallback).addMigrations(MIGRATION_1_2) .build(); } } @@ -71,6 +72,18 @@ public abstract class TraceDataBase extends RoomDatabase { return INSTANCE; } + /** + *扩充字段 + */ + public static final Migration MIGRATION_1_2 = new Migration(1, 2) { + @Override + public void migrate(SupportSQLiteDatabase database) { + // 增加字段 + database.execSQL("ALTER TABLE niLocation " + " ADD COLUMN groupId " + " TEXT"); + database.execSQL("ALTER TABLE niLocation " + " ADD COLUMN timeStamp " + " TEXT"); + } + }; + /** * Override the onOpen method to populate the database. * For this sample, we clear the database every time it is created or opened. diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/NiLocation.java b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/NiLocation.java index 1bffbcd3..21e3a1fc 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/NiLocation.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/NiLocation.java @@ -61,6 +61,11 @@ public class NiLocation extends Feature{ private int tilex; @ColumnInfo(name = "tiley") private int tiley; + @ColumnInfo(name = "groupId") + private String groupId; + @ColumnInfo(name = "timeStamp") + private String timeStamp; + private boolean isAccouracy; private boolean isSpeed; private boolean isAltitude; @@ -297,4 +302,20 @@ public class NiLocation extends Feature{ public void setErrorCode(String errorCode) { this.errorCode = errorCode; } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getTimeStamp() { + return timeStamp; + } + + public void setTimeStamp(String timeStamp) { + this.timeStamp = timeStamp; + } } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/TaskBean.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/TaskBean.kt index b740d116..75021bd4 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/TaskBean.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/TaskBean.kt @@ -62,6 +62,8 @@ open class TaskBean @JvmOverloads constructor( @Ignore var message: String = "", + @Ignore + var errMsg: String = "", var color: Int = 0xFF00AA ) : RealmObject() { fun getDownLoadUrl(): String { 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 380d0f45..f599fcb7 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 @@ -4,6 +4,7 @@ import android.content.Context; import android.os.Build; import android.os.Bundle; import android.util.AttributeSet; +import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -224,6 +225,8 @@ public final class NIMapView extends RelativeLayout { getVtmMap().events.bind(new Map.UpdateListener() { @Override public void onMapEvent(Event e, MapPosition mapPosition) { + //Log.e("qj",Thread.currentThread()+""); + //旋转 if (mLastRotateZ != mapPosition.bearing) { mRotateAnimation.startRotationZ(mLastRotateZ, mapPosition.bearing); @@ -593,7 +596,8 @@ public final class NIMapView extends RelativeLayout { VECTOR(2)/*高亮组*/, OPERATE_LINE(3)/*操作图层组*/, OPERATE_MARKER(4)/*操作图层组*/, - NAVIGATION(5)/*定位导航组*/; + NAVIGATION(5)/*定位导航组*/, + LABEL(6)/*图标,文字图层*/; int groupIndex; diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt index 01295323..e3e4f8fa 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt @@ -22,10 +22,11 @@ import java.io.File /** * Layer 操作 */ -class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView,tracePath: String) : BaseHandler(context, mapView) { +class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView, tracePath: String) : + BaseHandler(context, mapView) { private var baseGroupLayer // 用于盛放所有基础底图的图层组,便于统一管理 : GroupLayer? = null - private val mTracePath:String = tracePath + private val mTracePath: String = tracePath /** * 轨迹渲染图层 @@ -70,12 +71,13 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView,tracePa vectorNiLocationTileLayer = VectorTileLayer(mMapView.vtmMap, mapLifeNiLocationTileSource) - labelNiLocationLayer = LabelLayer(mMapView.vtmMap, vectorNiLocationTileLayer, LabelTileLoaderHook(), 15) + labelNiLocationLayer = + LabelLayer(mMapView.vtmMap, vectorNiLocationTileLayer, LabelTileLoaderHook(), 15) - if(vectorNiLocationTileLayer!=null){ - addLayer(vectorNiLocationTileLayer,NIMapView.LAYER_GROUPS.BASE) + if (vectorNiLocationTileLayer != null) { + addLayer(vectorNiLocationTileLayer, NIMapView.LAYER_GROUPS.BASE) } - if(labelNiLocationLayer!=null){ + if (labelNiLocationLayer != null) { addLayer(labelNiLocationLayer, NIMapView.LAYER_GROUPS.BASE) } @@ -92,7 +94,7 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView,tracePa mMapView.vtmMap.events.bind(UpdateListener { e, mapPosition -> if (e == org.oscim.map.Map.SCALE_EVENT) { // 测评数据图层在指定Zoom后开始显示 - val isOmdbZoom = mapPosition.zoomLevel>=Constant.OMDB_MIN_ZOOM + val isOmdbZoom = mapPosition.zoomLevel >= Constant.OMDB_MIN_ZOOM baseGroupLayer?.layers?.forEach { it.isEnabled = !isOmdbZoom } @@ -105,23 +107,33 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView,tracePa private fun initOMDBVectorTileLayer() { // 初始化OMDB参考相关图层 omdbReferenceTileLayer = VectorTileLayer(mMapView.vtmMap, omdbReferenceTileSource) - omdbReferenceLabelLayer = LabelLayer(mMapView.vtmMap, omdbReferenceTileLayer, LabelTileLoaderHook(), Constant.OMDB_MIN_ZOOM) - if(omdbReferenceTileLayer!=null){ - addLayer(omdbReferenceTileLayer,NIMapView.LAYER_GROUPS.VECTOR_TILE) + omdbReferenceLabelLayer = LabelLayer( + mMapView.vtmMap, + omdbReferenceTileLayer, + LabelTileLoaderHook(), + Constant.OMDB_MIN_ZOOM + ) + if (omdbReferenceTileLayer != null) { + addLayer(omdbReferenceTileLayer, NIMapView.LAYER_GROUPS.VECTOR_TILE) } - if(omdbReferenceLabelLayer!=null){ - addLayer(omdbReferenceLabelLayer, NIMapView.LAYER_GROUPS.VECTOR_TILE) + if (omdbReferenceLabelLayer != null) { + addLayer(omdbReferenceLabelLayer, NIMapView.LAYER_GROUPS.LABEL) } - // 初始化OMDB相关图层 omdbVectorTileLayer = VectorTileLayer(mMapView.vtmMap, omdbTileSource) - omdbLabelLayer = LabelLayer(mMapView.vtmMap, omdbVectorTileLayer, LabelTileLoaderHook(), Constant.OMDB_MIN_ZOOM) - if(omdbVectorTileLayer!=null){ - addLayer(omdbVectorTileLayer,NIMapView.LAYER_GROUPS.VECTOR_TILE) + omdbLabelLayer = LabelLayer( + mMapView.vtmMap, + omdbVectorTileLayer, + LabelTileLoaderHook(), + Constant.OMDB_MIN_ZOOM + ) + if (omdbVectorTileLayer != null) { + addLayer(omdbVectorTileLayer, NIMapView.LAYER_GROUPS.VECTOR_TILE) } - if(omdbLabelLayer!=null){ - addLayer(omdbLabelLayer, NIMapView.LAYER_GROUPS.VECTOR_TILE) + if (omdbLabelLayer != null) { + addLayer(omdbLabelLayer, NIMapView.LAYER_GROUPS.LABEL) } + } /** diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt index 823510f8..851d095c 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt @@ -11,6 +11,7 @@ import com.baidu.location.LocationClientOption import com.baidu.location.LocationClientOption.LocationMode import com.navinfo.collect.library.data.entity.NiLocation import com.navinfo.collect.library.map.NIMapView +import com.navinfo.collect.library.utils.DateUtils import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.launch import org.oscim.core.GeoPoint @@ -195,6 +196,7 @@ class LocationLayerHandler(context: AppCompatActivity, mapView: NIMapView) : niLocation.address = mCurrentLocation!!.addrStr niLocation.street = mCurrentLocation!!.street niLocation.town = mCurrentLocation!!.town + niLocation.speed = mCurrentLocation!!.speed niLocation.streetNumber = mCurrentLocation!!.streetNumber niLocation.errorCode = mCurrentLocation!!.locType.toString() return niLocation diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.kt index ba4ed19b..731a4570 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.kt @@ -84,5 +84,6 @@ class OmdbTaskLinkLayer(map: Map, private var style: Style) : VectorLayer(map) { } lineMap.clear() clearSelectLine() + update() } } \ No newline at end of file diff --git a/vtm b/vtm index 6a91e63b..c6ba77aa 160000 --- a/vtm +++ b/vtm @@ -1 +1 @@ -Subproject commit 6a91e63b0c9f65fd68f8aa4972b1b7bf20a5a962 +Subproject commit c6ba77aa0eb90a84fb19377706eb6792ec4a42b6