18034727885
2026-06-22 e8cfe859d12c19db4a8f1c507cf099c0acb93a15
修复问题
7个文件已添加
10个文件已修改
571 ■■■■■ 已修改文件
app/src/main/java/com/xw/yunwei/model/CarModel.kt 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/model/TaskAccidentModel.kt 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/model/TrunkLockStatusInfo.kt 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/net/WorkApi.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/net/WorkRepository.kt 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/task/accident/detail/AccidentDetailActivity.kt 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/task/accident/detail/AccidentDetailVM.kt 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/work/car/detail/CarDetailVM.kt 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/work/car/detail/dispatch/DispatchFragment.kt 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/selector_car_trunk.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/selector_gray2_to_blue1_bg_4.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/shape_gray2_bg_4.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/svg_car_trunk_closed.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/svg_circle_loading.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/svg_net_lock_gray.xml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_accident_detail.xml 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_car_dispatch.xml 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/model/CarModel.kt
@@ -246,6 +246,11 @@
    @SerializedName("updateTime")
    val updateTime: String? = null,
    var pointName: String? = null,//收车点位名称
    /**
     * 是否已经打开后备箱 1是 前端字段
     */
    val hadTrunkOpened: String? = null
) : Parcelable {
    //获取车辆图片
    fun getShowVehiclePicture(): String {
@@ -263,7 +268,7 @@
    //是否已开启后备箱
    fun hadOpenedTrunk(): Boolean {
        return false
        return hadTrunkOpened == "1"
    }
    //是否正在工作中
    fun isWorking(): Boolean {
app/src/main/java/com/xw/yunwei/model/TaskAccidentModel.kt
@@ -143,7 +143,12 @@
     * 可以操作到达的配置范围,单位米
     */
    @SerializedName("canArriveRange")
    val canArriveRange: Int? = null
    val canArriveRange: Int? = null,
    /**
     * 是否已经打开后备箱 1是 前端字段
     */
    val hadTrunkOpened: String? = null
) {
    /**
@@ -167,7 +172,7 @@
    //是否已开启后备箱
    fun hadOpenedTrunk(): Boolean {
        return false
        return hadTrunkOpened == "1"
    }
}
app/src/main/java/com/xw/yunwei/model/TrunkLockStatusInfo.kt
New file
@@ -0,0 +1,4 @@
package com.xw.yunwei.model
//后备箱解锁状态
data class TrunkLockStatusInfo(val status: String? = null)
app/src/main/java/com/xw/yunwei/net/WorkApi.kt
@@ -22,6 +22,7 @@
import com.xw.yunwei.model.MaintainRecordModel
import com.xw.yunwei.model.RepairRecordModel
import com.xw.yunwei.model.SiteModel
import com.xw.yunwei.model.TrunkLockStatusInfo
import com.xw.yunwei.model.VehicleLocationInfo
import com.xw.yunwei.model.WebContent1Model
import okhttp3.RequestBody
@@ -175,4 +176,8 @@
    /* 获取所有收车点 */
    @GET("operation/maintenance-app/api/v1/point/listParkingPoint")
    fun getAllAcceptCarPoints(@Query("vehicleId") vehicleId: String): Call<HttpResponse<List<AcceptCarPointInfo>>>
    /* 车辆运维-检测后备箱解锁状态 */
    @GET("vehicleConvoy/maintenance-app/api/v1/order/queryVehicleTrunkStatus")
    fun checkTrunkLockStatus(@Query("vehicleId") vehicleId: String): Call<HttpResponse<Int>>
}
app/src/main/java/com/xw/yunwei/net/WorkRepository.kt
@@ -11,6 +11,7 @@
import com.xw.yunwei.model.CruiseCheckInOperationResult
import com.xw.yunwei.model.MaintainRecordModel
import com.xw.yunwei.model.SiteModel
import com.xw.yunwei.model.TrunkLockStatusInfo
import com.xw.yunwei.model.UploadModel
class WorkRepository(private val api: WorkApi) {
@@ -132,4 +133,9 @@
    suspend fun getAllAcceptCarPoints(vehicleId: String): List<AcceptCarPointInfo>? {
        return api.getAllAcceptCarPoints(vehicleId).interceptAwait()
    }
    /* 车辆运维-检测后备箱解锁状态 */
    suspend fun checkTrunkLockStatus(vehicleId: String): Int? {
        return api.checkTrunkLockStatus(vehicleId).interceptAwait()
    }
}
app/src/main/java/com/xw/yunwei/ui/task/accident/detail/AccidentDetailActivity.kt
@@ -1,7 +1,12 @@
package com.xw.yunwei.ui.task.accident.detail
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.animation.LinearInterpolator
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.GridLayoutManager
import com.amap.api.location.AMapLocation
@@ -22,6 +27,7 @@
import com.xw.yunwei.databinding.ActivityAccidentDetailBinding
import com.xw.yunwei.databinding.LayoutAccidentType1Binding
import com.xw.yunwei.databinding.LayoutAccidentType2Binding
import com.xw.yunwei.extension.colorIdToColorValue
import com.xw.yunwei.model.XpErrorType
@@ -33,17 +39,22 @@
 *
 * @author zmc
 */
class AccidentDetailActivity : BaseBusinessActivity<ActivityAccidentDetailBinding, AccidentDetailVM>(), GpsHelper.OnMapLocation {
class AccidentDetailActivity :
    BaseBusinessActivity<ActivityAccidentDetailBinding, AccidentDetailVM>(),
    GpsHelper.OnMapLocation {
    override fun getBindingVariable() = BR.viewModel
    /** 图片查看事件监听 */
    lateinit var imageEvent: ImageEventListener<FileSelectBean>
    /** 图片选择/展示适配器 */
    lateinit var adapter: ImageSelectAdapter
    /** GPS 定位辅助类 */
    var gpsHelper: GpsHelper? = null
    /** 页面状态保存 */
    var savedInstanceState: Bundle?=null
    var savedInstanceState: Bundle? = null
    override fun myCreate(savedInstanceState: Bundle?) {
        super.myCreate(savedInstanceState)
@@ -93,7 +104,7 @@
            checkActionPermissions()
        }
        // 监听是否可确认到达,控制按钮背景色
        viewModel.canConfirmArrive.observe(this){
        viewModel.canConfirmArrive.observe(this) {
            if (it) {
                binding.tvControl.setBackgroundResource(R.drawable.shape_blue_5_bg_4)
            } else {
@@ -101,9 +112,62 @@
            }
        }
        // 监听应用权限变化,重新校验按钮权限
        MyApp.permissions.observe(this){
        MyApp.permissions.observe(this) {
            checkActionPermissions()
        }
        viewModel.hadCheckDoorStatus.observe(this) {
            binding.ivDoorStatus.isVisible = !it
            binding.ivDoorStatusLoading.isVisible = it
            if (it) {
                // 创建旋转动画
                val rotateAnimator = getRotationAnimator(binding.ivDoorStatusLoading)
                rotateAnimator.start()
                binding.ivDoorStatusLoading.tag = rotateAnimator
            } else {
                (binding.ivDoorStatusLoading.tag as? ObjectAnimator)?.cancel()
            }
        }
        viewModel.hadDoorOpened.observe(this) {
            binding.unlockDoor.setBackgroundResource(if (it) com.xw.common.R.drawable.shape_blue1_bg_4 else R.drawable.shape_gray2_bg_4)
            binding.ivDoorStatus.setImageResource(if (it) com.xw.common.R.drawable.svg_car_cmjs else R.drawable.svg_net_lock_gray)
            binding.tvDoorLock.setTextColor(
                (if (it) com.xw.common.R.color.blue_5 else com.xw.common.R.color.gray_7).colorIdToColorValue(
                    this
                )
            )
        }
        viewModel.hadCheckTrunkStatus.observe(this) {
            binding.ivTrunkStatus.isVisible = !it
            binding.ivTrunkStatusLoading.isVisible = it
            if (it) {
                // 创建旋转动画
                val rotateAnimator = getRotationAnimator(binding.ivTrunkStatusLoading)
                rotateAnimator.start()
                binding.ivTrunkStatusLoading.tag = rotateAnimator
            } else {
                (binding.ivTrunkStatusLoading.tag as? ObjectAnimator)?.cancel()
            }
        }
        viewModel.hadTrunkOpened.observe(this) {
            binding.unlockBox.setBackgroundResource(if (it) com.xw.common.R.drawable.shape_blue1_bg_4 else R.drawable.shape_gray2_bg_4)
            binding.ivTrunkStatus.setImageResource(if (it) com.xw.common.R.drawable.svg_car_hbxjs else R.drawable.svg_car_trunk_closed)
            binding.tvTrunkLock.setTextColor(
                (if (it) com.xw.common.R.color.blue_5 else com.xw.common.R.color.gray_7).colorIdToColorValue(
                    this
                )
            )
        }
    }
    //获取无限旋转动画
    private fun getRotationAnimator(view: View): ObjectAnimator {
        return ObjectAnimator.ofFloat(view, "rotation", 0f, 360f)
            .apply {
                duration = 2000           // 旋转一圈用时 2 秒
                repeatCount = ValueAnimator.INFINITE  // 无限重复
                interpolator = LinearInterpolator()   // 匀速旋转
            }
    }
    /**
app/src/main/java/com/xw/yunwei/ui/task/accident/detail/AccidentDetailVM.kt
@@ -6,7 +6,6 @@
import android.os.Looper
import android.os.Message
import android.view.View
import androidx.core.os.bundleOf
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.map
import androidx.lifecycle.viewModelScope
@@ -126,6 +125,18 @@
    //车辆位置
    val carLocation = MutableLiveData<VehicleLocationInfo>()
    //是否已经循环检测车门状态
    var hadCheckDoorStatus = MutableLiveData(false)
    //是否已经车门开启
    var hadDoorOpened = MutableLiveData(false)
    //是否已经循环检测后备箱状态
    var hadCheckTrunkStatus = MutableLiveData(false)
    //是否已经后备箱开启
    var hadTrunkOpened = MutableLiveData(false)
    /** 页面点击事件统一监听 */
    var onClick = View.OnClickListener {
        when (it.id) {
@@ -143,7 +154,7 @@
     */
    fun queryDetail() {
        launchRequest {
            taskRepository.vehicleAccidentDetail("$taskId")?.let {
            taskRepository.vehicleAccidentDetail("$taskId")?.let { it ->
                taskDetail.postValue(it)
                if (it.status == 0) {
                    startCountdown()
@@ -166,6 +177,9 @@
                    )
                    loopRefreshCarLocation()
                }
                checkTrunkStatus(it.vehicleId.toString()) {
                    taskDetail.postValue(taskDetail.value?.copy(hadTrunkOpened = it.toString()))
                }
            }
        }
    }
@@ -186,8 +200,40 @@
     * @param type 解锁类型:1 车门,2 后备箱
     */
    fun unlockByType(type: Int) {
        launchRequest(tips = "正在传达指令", error = { code, msg ->
        if (type == 1 && hadDoorOpened.value == true) {
            return
        }
        if (type == 2 && hadTrunkOpened.value == true) {
            return
        }
        if (type == 1 && hadCheckDoorStatus.value == true) {
            ToastUtilCommon.showError("正在检测后备箱状态中...")
            return
        }
        if (type == 2 && hadCheckTrunkStatus.value == true) {
            ToastUtilCommon.showError("正在检测后备箱状态中...")
            return
        }
        when (type) {
            1 -> {
                hadCheckDoorStatus.value = true
            }
            2 -> {
                hadCheckTrunkStatus.value = true
            }
        }
        launchRequest(tips = "正在传达指令", showLoading = false, error = { code, msg ->
            ToastUtilCommon.showError(msg.ifEmpty { "操作失败,请重试" })
            when (type) {
                1 -> {
                    hadCheckDoorStatus.postValue(false)
                }
                2 -> {
                    hadCheckTrunkStatus.postValue(false)
                }
            }
        }) {
            val map = mutableMapOf<String, Any?>()
            val isOpen =
@@ -198,12 +244,28 @@
            map["doorType"] = if (type == 1) "door" else "trunk" // 解锁类型 1车门 2后备箱
            map["operationType"] = if (isOpen) "open" else "close" // 操作类型(open/close)
            workRepository.unlockByType(map)
            val tips = if (type == 1) {
                if (isOpen) "车门已解锁" else "车门已关闭"
            } else {
                if (isOpen) "后备箱已解锁" else "后备箱已关闭"
            when (type) {
                1 -> {
                    hadCheckDoorStatus.postValue(false)
                    hadDoorOpened.postValue(true)
                }
                2 -> {
                    hadCheckTrunkStatus.postValue(false)
                    hadTrunkOpened.postValue(false)
                }
            }
            ToastUtilCommon.showSuc(tips)
        }
    }
    //检测后备箱状态
    private fun checkTrunkStatus(vehicleId: String, block: (status: Int) -> Unit) {
        launchRequest(showLoading = false, error = { code, msg ->
            LogUtils.e(TAG, "launchRequest: code = $code msg = $msg")
        }) {
            workRepository.checkTrunkLockStatus(vehicleId)?.also {
                block.invoke(it)
            }
        }
    }
app/src/main/java/com/xw/yunwei/ui/work/car/detail/CarDetailVM.kt
@@ -4,6 +4,7 @@
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.map
import com.xw.common.base.BasePagingViewModel
import com.xw.common.utils.LogUtils
import com.xw.common.utils.ToastUtilCommon
import com.xw.yunwei.MyApp
import com.xw.yunwei.model.AcceptCarPointInfo
@@ -40,17 +41,32 @@
    val recordPermissions = MutableLiveData(false) // 运维记录权限
    val policyPermissions = MutableLiveData(false) // 保单权限
    //是否已经循环检测车门状态
    var hadCheckDoorStatus = MutableLiveData(false)
    //是否已经车门开启
    var hadDoorOpened = MutableLiveData(false)
    //是否已经循环检测后备箱状态
    var hadCheckTrunkStatus = MutableLiveData(false)
    //是否已经后备箱开启
    var hadTrunkOpened = MutableLiveData(false)
    fun queryInfo() {
        refreshLiveData.refresh()
        launchRequest(showLoading = false, error = { code, msg ->
            ToastUtilCommon.showError(msg)
            refreshLiveData.done()
        }) {
            workRepository.queryCarInfo(carId)?.let {
            workRepository.queryCarInfo(carId)?.let { info ->
                runOnMainThread {
                    carInfo.value = it
                    carInfo.value = info
                    refreshLiveData.done()
                    checkCould()
                }
                checkTrunkStatus(info.id.toString()) {
                    carInfo.postValue(info.copy(hadTrunkOpened = it.toString()))
                }
            }
        }
@@ -133,8 +149,40 @@
    }
    fun unlockByType(type: Int) {
        launchRequest(tips = "正在传达指令", error = { code, msg ->
        if (type == 1 && hadDoorOpened.value == true) {
            return
        }
        if (type == 2 && hadTrunkOpened.value == true) {
            return
        }
        if (type == 1 && hadCheckDoorStatus.value == true) {
            ToastUtilCommon.showError("正在检测后备箱状态中...")
            return
        }
        if (type == 2 && hadCheckTrunkStatus.value == true) {
            ToastUtilCommon.showError("正在检测后备箱状态中...")
            return
        }
        when (type) {
            1 -> {
                hadCheckDoorStatus.value = true
            }
            2 -> {
                hadCheckTrunkStatus.value = true
            }
        }
        launchRequest(tips = "正在传达指令", showLoading = false, error = { code, msg ->
            ToastUtilCommon.showError(msg.ifEmpty { "操作失败,请重试" })
            when (type) {
                1 -> {
                    hadCheckDoorStatus.postValue(false)
                }
                2 -> {
                    hadCheckTrunkStatus.postValue(false)
                }
            }
        }) {
            val map = mutableMapOf<String, Any?>()
            val isOpen =
@@ -145,12 +193,28 @@
            map["doorType"] = if (type == 1) "door" else "trunk" // 解锁类型 1车门 2后备箱
            map["operationType"] = if (isOpen) "open" else "close" // 操作类型(open/close)
            workRepository.unlockByType(map)
            val tips = if (type == 1) {
                if (isOpen) "车门已解锁" else "车门已关闭"
            } else {
                if (isOpen) "后备箱已解锁" else "后备箱已关闭"
            when (type) {
                1 -> {
                    hadCheckDoorStatus.postValue(false)
                    hadDoorOpened.postValue(true)
                }
                2 -> {
                    hadCheckTrunkStatus.postValue(false)
                    hadTrunkOpened.postValue(false)
                }
            }
            ToastUtilCommon.showSuc(tips)
        }
    }
    //检测后备箱状态
    private fun checkTrunkStatus(vehicleId: String, block: (status: Int) -> Unit) {
        launchRequest(showLoading = false, error = { code, msg ->
            LogUtils.e(TAG, "launchRequest: code = $code msg = $msg")
        }) {
            workRepository.checkTrunkLockStatus(vehicleId)?.also {
                block.invoke(it)
            }
        }
    }
app/src/main/java/com/xw/yunwei/ui/work/car/detail/dispatch/DispatchFragment.kt
@@ -1,6 +1,11 @@
package com.xw.yunwei.ui.work.car.detail.dispatch
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.view.View
import android.view.animation.LinearInterpolator
import androidx.core.view.isVisible
import com.xw.common.base.BaseFragmentNoVM
import com.xw.common.custom.SlideButtonView
import com.xw.common.custom.SlideButtonView.Companion.DIRECTION_LEFT
@@ -10,6 +15,7 @@
import com.xw.common.viewAdapter.ViewAdapter
import com.xw.yunwei.R
import com.xw.yunwei.databinding.FragmentCarDispatchBinding
import com.xw.yunwei.extension.colorIdToColorValue
import com.xw.yunwei.model.CarModel
import com.xw.yunwei.ui.dialog.ConfirmAcceptCarPointDialog
import com.xw.yunwei.ui.dialog.SelectConfirmAcceptCarPointDialog
@@ -38,6 +44,59 @@
                resetSlideView(binding.slideView1, DIRECTION_RIGHT, "右滑发车")
            }
        }
        viewModel.hadCheckDoorStatus.observe(this) {
            binding.ivDoorStatus.isVisible = !it
            binding.ivDoorStatusLoading.isVisible = it
            if (it) {
                // 创建旋转动画
                val rotateAnimator = getRotationAnimator(binding.ivDoorStatusLoading)
                rotateAnimator.start()
                binding.ivDoorStatusLoading.tag = rotateAnimator
            } else {
                (binding.ivDoorStatusLoading.tag as? ObjectAnimator)?.cancel()
            }
        }
        viewModel.hadDoorOpened.observe(this) {
            binding.unlockDoor.setBackgroundResource(if (it) com.xw.common.R.drawable.shape_blue1_bg_4 else R.drawable.shape_gray2_bg_4)
            binding.ivDoorStatus.setImageResource(if (it) com.xw.common.R.drawable.svg_car_cmjs else R.drawable.svg_net_lock_gray)
            binding.tvDoorLock.setTextColor(
                (if (it) com.xw.common.R.color.blue_5 else com.xw.common.R.color.gray_7).colorIdToColorValue(
                    requireActivity()
                )
            )
        }
        viewModel.hadCheckTrunkStatus.observe(this) {
            binding.ivTrunkStatus.isVisible = !it
            binding.ivTrunkStatusLoading.isVisible = it
            if (it) {
                // 创建旋转动画
                val rotateAnimator = getRotationAnimator(binding.ivTrunkStatusLoading)
                rotateAnimator.start()
                binding.ivTrunkStatusLoading.tag = rotateAnimator
            } else {
                (binding.ivTrunkStatusLoading.tag as? ObjectAnimator)?.cancel()
            }
        }
        viewModel.hadTrunkOpened.observe(this) {
            binding.unlockBox.setBackgroundResource(if (it) com.xw.common.R.drawable.shape_blue1_bg_4 else R.drawable.shape_gray2_bg_4)
            binding.ivTrunkStatus.setImageResource(if (it) com.xw.common.R.drawable.svg_car_hbxjs else R.drawable.svg_car_trunk_closed)
            binding.tvTrunkLock.setTextColor(
                (if (it) com.xw.common.R.color.blue_5 else com.xw.common.R.color.gray_7).colorIdToColorValue(
                    requireActivity()
                )
            )
        }
    }
    //获取无限旋转动画
    private fun getRotationAnimator(view: View): ObjectAnimator {
        return ObjectAnimator.ofFloat(view, "rotation", 0f, 360f)
            .apply {
                duration = 2000           // 旋转一圈用时 2 秒
                repeatCount = ValueAnimator.INFINITE  // 无限重复
                interpolator = LinearInterpolator()   // 匀速旋转
            }
    }
    override fun setListener() {
app/src/main/res/drawable/selector_car_trunk.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/svg_car_trunk_closed" android:state_selected="false" />
    <item android:drawable="@drawable/svg_car_hbxjs" android:state_selected="true" />
</selector>
app/src/main/res/drawable/selector_gray2_to_blue1_bg_4.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shape_blue1_bg_4" android:state_selected="true" />
    <item android:drawable="@drawable/shape_gray2_bg_4" android:state_selected="false" />
</selector>
app/src/main/res/drawable/shape_gray2_bg_4.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="@dimen/dp_4" />
    <solid android:color="@color/gray_2" />
</shape>
app/src/main/res/drawable/svg_car_trunk_closed.xml
New file
@@ -0,0 +1,29 @@
<!--
  ~ Copyright (C) 2026 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="32dp"
    android:height="32dp"
    android:viewportWidth="32"
    android:viewportHeight="32">
  <group>
    <clip-path
        android:pathData="M0,0h32v32h-32z"/>
    <path
        android:pathData="M8.057,10.323C10.944,10.094 12.889,10.29 15.022,10.99L15.418,11.128C16.047,11.36 16.828,11.697 17.779,12.139L18.612,12.533C19.121,12.777 20.599,13.5 21.074,13.734L21.207,13.799L23.385,14.545L23.508,14.586C23.88,14.707 24.123,15.069 24.096,15.463L24.065,15.913C24.037,16.386 24.072,16.824 24.173,17.277L24.404,18.372L24.714,19.967C24.747,20.137 24.727,20.313 24.659,20.471L23.532,23.09C23.41,23.372 23.149,23.567 22.848,23.6L20.468,23.866L20.44,23.934C19.861,25.235 18.615,26.1 17.209,26.18L17.004,26.185C15.531,26.183 14.193,25.313 13.578,23.958L13.557,23.91L8.156,23.91C7.728,23.91 7.367,23.588 7.313,23.158L7.307,23.051C7.307,22.576 7.687,22.192 8.156,22.192L14.076,22.192C14.466,22.192 14.809,22.431 14.956,22.782L14.998,22.905C15.243,23.823 16.064,24.463 17.004,24.467C17.886,24.467 18.657,23.901 18.955,23.074L19.008,22.905C19.123,22.484 19.5,22.193 19.931,22.193L19.979,22.197L22.171,21.948L22.997,20.028L22.811,19.066L22.552,17.805C22.419,17.275 22.355,16.729 22.36,16.182L22.364,16.012L21.06,15.565C20.876,15.501 20.734,15.452 20.569,15.388L17.886,14.086L17.388,13.849C16.126,13.255 15.164,12.841 14.499,12.624C12.589,11.997 10.864,11.823 8.191,12.036C7.722,12.076 7.31,11.723 7.273,11.248C7.236,10.773 7.588,10.358 8.057,10.323Z"
        android:fillColor="#31456A"
        android:fillAlpha="0.6"/>
  </group>
</vector>
app/src/main/res/drawable/svg_circle_loading.xml
New file
@@ -0,0 +1,40 @@
<!--
  ~ Copyright (C) 2026 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt"
    android:width="32dp"
    android:height="32dp"
    android:viewportWidth="32"
    android:viewportHeight="32">
  <group>
    <clip-path
        android:pathData="M-1,-1h34v34h-34z"/>
    <path
        android:pathData="M8.929,8.929Q11.858,6 16,6Q20.142,6 23.071,8.929Q26,11.858 26,16L26,16Q26,16.098 25.981,16.195Q25.961,16.292 25.924,16.383Q25.886,16.474 25.831,16.555Q25.777,16.637 25.707,16.707Q25.637,16.777 25.555,16.831Q25.474,16.886 25.383,16.924Q25.292,16.961 25.195,16.981Q25.098,17 25,17Q24.902,17 24.805,16.981Q24.708,16.961 24.617,16.924Q24.526,16.886 24.445,16.831Q24.363,16.777 24.293,16.707Q24.223,16.637 24.169,16.555Q24.114,16.474 24.076,16.383Q24.039,16.292 24.019,16.195Q24,16.098 24,16L24,16Q24,12.686 21.657,10.343Q19.314,8 16,8Q12.686,8 10.343,10.343Q8,12.686 8,16Q8,19.314 10.343,21.657Q12.686,24 16,24Q20.337,24 22.708,20.36L22.709,20.361Q22.777,20.256 22.868,20.171Q22.96,20.087 23.07,20.027Q23.18,19.968 23.301,19.937Q23.422,19.906 23.546,19.906Q23.645,19.906 23.741,19.926Q23.838,19.945 23.929,19.983Q24.02,20.02 24.102,20.075Q24.184,20.13 24.253,20.199Q24.323,20.269 24.378,20.351Q24.432,20.433 24.47,20.524Q24.508,20.615 24.527,20.711Q24.546,20.808 24.546,20.906Q24.546,21.203 24.384,21.452L24.384,21.452Q21.421,26 16,26Q11.858,26 8.929,23.071Q6,20.142 6,16Q6,11.858 8.929,8.929Z"
        android:fillType="evenOdd">
      <aapt:attr name="android:fillColor">
        <gradient
            android:centerX="16"
            android:centerY="16"
            android:gradientRadius="9"
            android:type="radial">
          <item android:offset="0.928" android:color="#00006BE1"/>
          <item android:offset="0.979" android:color="#FF006BE1"/>
        </gradient>
      </aapt:attr>
    </path>
  </group>
</vector>
app/src/main/res/drawable/svg_net_lock_gray.xml
New file
@@ -0,0 +1,43 @@
<!--
  ~ Copyright (C) 2026 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="32dp"
    android:height="32dp"
    android:viewportWidth="32"
    android:viewportHeight="32">
  <group>
    <clip-path
        android:pathData="M-0.75,-0.75h33.5v33.5h-33.5z"/>
    <path
        android:pathData="M6.554,11.966Q6.295,12.9 6.25,14.631L6.25,14.631Q6.25,14.64 6.25,14.65Q6.25,14.724 6.265,14.796Q6.279,14.869 6.307,14.937Q6.335,15.005 6.377,15.067Q6.418,15.128 6.47,15.18Q6.522,15.232 6.583,15.273Q6.645,15.315 6.713,15.343Q6.781,15.371 6.854,15.385Q6.926,15.4 7,15.4Q7.073,15.4 7.144,15.386Q7.215,15.372 7.282,15.345Q7.35,15.317 7.411,15.277Q7.471,15.238 7.523,15.187Q7.575,15.136 7.617,15.077Q7.658,15.017 7.687,14.95Q7.716,14.884 7.732,14.813Q7.748,14.742 7.75,14.669L7.75,14.669Q7.79,13.123 8,12.368Q8.21,11.609 8.716,11.18Q9.399,10.6 10.91,10.427Q12.026,10.3 15.491,10.3L15.491,10.3Q15.565,10.3 15.638,10.285Q15.71,10.271 15.778,10.243Q15.847,10.215 15.908,10.173Q15.969,10.132 16.022,10.08Q16.074,10.028 16.115,9.967Q16.156,9.905 16.184,9.837Q16.213,9.769 16.227,9.696Q16.241,9.624 16.241,9.55Q16.241,9.476 16.227,9.404Q16.213,9.331 16.184,9.263Q16.156,9.195 16.115,9.133Q16.074,9.072 16.022,9.02Q15.969,8.968 15.908,8.927Q15.847,8.886 15.778,8.857Q15.71,8.829 15.638,8.815Q15.565,8.8 15.491,8.8L15.491,8.8Q11.94,8.8 10.74,8.937Q8.776,9.161 7.746,10.036Q6.889,10.763 6.554,11.966ZM24.75,16.775L24.75,16.775Q24.75,19.813 24.585,20.855Q24.308,22.606 23.24,23.514Q22.337,24.28 20.79,24.537Q19.64,24.729 17.199,24.747L16.346,24.75L16.346,24.75L16.343,24.75Q16.269,24.75 16.197,24.735Q16.124,24.721 16.056,24.693Q15.988,24.665 15.927,24.623Q15.865,24.582 15.813,24.53Q15.761,24.478 15.72,24.417Q15.679,24.355 15.65,24.287Q15.622,24.219 15.608,24.146Q15.593,24.074 15.593,24Q15.593,23.926 15.608,23.854Q15.622,23.782 15.65,23.714Q15.678,23.646 15.719,23.584Q15.76,23.523 15.812,23.471Q15.864,23.419 15.925,23.378Q15.986,23.336 16.054,23.308Q16.122,23.28 16.194,23.265Q16.267,23.25 16.34,23.25L16.34,23.25L17.188,23.247Q19.51,23.23 20.544,23.058Q21.682,22.868 22.268,22.371Q22.913,21.823 23.103,20.621Q23.25,19.695 23.25,16.775L23.25,16.775Q23.25,16.701 23.265,16.629Q23.279,16.556 23.307,16.488Q23.335,16.42 23.376,16.358Q23.418,16.297 23.47,16.245Q23.522,16.193 23.583,16.152Q23.645,16.11 23.713,16.082Q23.781,16.054 23.854,16.04Q23.926,16.025 24,16.025Q24.074,16.025 24.146,16.04Q24.219,16.054 24.287,16.082Q24.355,16.11 24.417,16.152Q24.478,16.193 24.53,16.245Q24.582,16.297 24.623,16.358Q24.664,16.42 24.693,16.488Q24.721,16.556 24.735,16.629Q24.75,16.701 24.75,16.775Z"
        android:fillColor="#31456A"
        android:fillAlpha="0.6"
        android:fillType="evenOdd"/>
    <path
        android:pathData="M22.571,10.507L22.571,9.214C22.571,8.267 21.804,7.5 20.857,7.5L20.286,7.5C19.339,7.5 18.571,8.267 18.571,9.214L18.571,10.507C17.692,10.58 17,11.316 17,12.214L17,13.786C17,14.732 17.768,15.5 18.714,15.5L22.429,15.5C23.375,15.5 24.143,14.732 24.143,13.786L24.143,12.214C24.143,11.316 23.451,10.58 22.571,10.507ZM19.286,9.214C19.286,8.663 19.734,8.214 20.286,8.214L20.857,8.214C21.409,8.214 21.857,8.663 21.857,9.214L21.857,10.5L19.286,10.5L19.286,9.214ZM23.429,13.786C23.429,14.337 22.98,14.786 22.429,14.786L18.714,14.786C18.163,14.786 17.714,14.337 17.714,13.786L17.714,12.214C17.714,11.663 18.163,11.214 18.714,11.214L22.429,11.214C22.98,11.214 23.429,11.663 23.429,12.214L23.429,13.786Z"
        android:fillColor="#31456A"
        android:fillAlpha="0.6"/>
    <path
        android:pathData="M24.443,13.786L24.443,12.214Q24.443,11.425 23.907,10.847Q23.472,10.377 22.871,10.249L22.871,9.214Q22.871,8.38 22.281,7.79Q21.691,7.2 20.857,7.2L20.286,7.2Q19.451,7.2 18.861,7.79Q18.271,8.38 18.271,9.214L18.271,10.249Q17.671,10.377 17.236,10.847Q16.7,11.425 16.7,12.214L16.7,13.786Q16.7,14.62 17.29,15.21Q17.88,15.8 18.714,15.8L22.429,15.8Q23.263,15.8 23.853,15.21Q24.443,14.62 24.443,13.786ZM23.467,11.255Q23.843,11.661 23.843,12.214L23.843,13.786Q23.843,14.371 23.429,14.786Q23.014,15.2 22.429,15.2L18.714,15.2Q18.128,15.2 17.714,14.786Q17.3,14.371 17.3,13.786L17.3,12.214Q17.3,11.661 17.676,11.255Q18.05,10.851 18.596,10.806L18.871,10.783L18.871,9.214Q18.871,8.628 19.286,8.214Q19.7,7.8 20.286,7.8L20.857,7.8Q21.443,7.8 21.857,8.214Q22.271,8.628 22.271,9.214L22.271,10.783L22.547,10.806Q23.093,10.851 23.467,11.255ZM18.986,9.214L18.986,10.8L22.157,10.8L22.157,9.214Q22.157,8.676 21.776,8.295Q21.395,7.914 20.857,7.914L20.286,7.914Q19.748,7.914 19.367,8.295Q18.986,8.676 18.986,9.214ZM19.586,10.2L21.557,10.2L21.557,9.214Q21.557,8.925 21.352,8.72Q21.146,8.514 20.857,8.514L20.286,8.514Q19.996,8.514 19.791,8.72Q19.586,8.925 19.586,9.214L19.586,10.2ZM23.729,13.786L23.729,12.214Q23.729,11.676 23.347,11.295Q22.966,10.914 22.429,10.914L18.714,10.914Q18.176,10.914 17.795,11.295Q17.414,11.676 17.414,12.214L17.414,13.786Q17.414,14.323 17.795,14.705Q18.176,15.086 18.714,15.086L22.429,15.086Q22.966,15.086 23.347,14.705Q23.729,14.323 23.729,13.786ZM22.923,11.72Q23.129,11.925 23.129,12.214L23.129,13.786Q23.129,14.075 22.923,14.28Q22.718,14.486 22.429,14.486L18.714,14.486Q18.425,14.486 18.22,14.28Q18.014,14.075 18.014,13.786L18.014,12.214Q18.014,11.925 18.22,11.72Q18.425,11.514 18.714,11.514L22.429,11.514Q22.718,11.514 22.923,11.72Z"
        android:fillColor="#7F8BA3"
        android:fillType="evenOdd"/>
    <path
        android:pathData="M7.038,16.45Q8.439,16.45 9.806,17.035Q11.137,17.604 12.198,18.625Q14.55,20.886 14.55,24L14.55,24Q14.55,24.074 14.535,24.146Q14.521,24.219 14.493,24.287Q14.464,24.355 14.423,24.417Q14.382,24.478 14.33,24.53Q14.278,24.582 14.216,24.623Q14.155,24.664 14.087,24.693Q14.019,24.721 13.946,24.735Q13.874,24.75 13.8,24.75Q13.726,24.75 13.654,24.735Q13.581,24.721 13.513,24.693Q13.445,24.664 13.383,24.623Q13.322,24.582 13.27,24.53Q13.217,24.478 13.176,24.417Q13.135,24.355 13.107,24.287Q13.079,24.219 13.064,24.146Q13.05,24.074 13.05,24L13.05,24Q13.05,21.525 11.158,19.706Q9.332,17.95 7.038,17.95L7.038,17.95Q6.964,17.95 6.892,17.935Q6.819,17.921 6.751,17.893Q6.683,17.864 6.621,17.823Q6.56,17.782 6.508,17.73Q6.456,17.678 6.415,17.617Q6.374,17.555 6.345,17.487Q6.317,17.419 6.303,17.346Q6.288,17.274 6.288,17.2Q6.288,17.126 6.303,17.054Q6.317,16.981 6.345,16.913Q6.374,16.845 6.415,16.783Q6.456,16.722 6.508,16.67Q6.56,16.618 6.621,16.577Q6.683,16.535 6.751,16.507Q6.819,16.479 6.892,16.465Q6.964,16.45 7.038,16.45L7.038,16.45ZM10.304,24Q10.304,22.719 9.292,21.709Q8.28,20.7 7,20.7L7,20.7Q6.926,20.7 6.854,20.685Q6.781,20.671 6.713,20.642Q6.645,20.614 6.583,20.573Q6.522,20.532 6.47,20.48Q6.417,20.428 6.376,20.366Q6.335,20.305 6.307,20.237Q6.279,20.168 6.264,20.096Q6.25,20.024 6.25,19.95Q6.25,19.876 6.264,19.803Q6.279,19.731 6.307,19.663Q6.335,19.595 6.376,19.533Q6.417,19.472 6.47,19.42Q6.522,19.367 6.583,19.326Q6.645,19.285 6.713,19.257Q6.781,19.229 6.854,19.214Q6.926,19.2 7,19.2L7,19.2Q7.937,19.2 8.833,19.599Q9.678,19.976 10.351,20.647Q11.025,21.319 11.403,22.164Q11.804,23.06 11.804,24L11.804,24Q11.804,24.074 11.79,24.146Q11.775,24.219 11.747,24.287Q11.719,24.355 11.678,24.417Q11.637,24.478 11.585,24.53Q11.532,24.582 11.471,24.623Q11.409,24.664 11.341,24.693Q11.273,24.721 11.201,24.735Q11.128,24.75 11.054,24.75Q10.98,24.75 10.908,24.735Q10.836,24.721 10.767,24.693Q10.699,24.664 10.638,24.623Q10.576,24.582 10.524,24.53Q10.472,24.478 10.431,24.417Q10.39,24.355 10.362,24.287Q10.333,24.219 10.319,24.146Q10.304,24.074 10.304,24L10.304,24ZM7.835,23.9L7.835,23.9Q7.761,23.9 7.688,23.885Q7.616,23.871 7.548,23.843Q7.479,23.814 7.418,23.773Q7.357,23.732 7.304,23.68Q7.252,23.628 7.211,23.567Q7.17,23.505 7.142,23.437Q7.113,23.369 7.099,23.296Q7.085,23.224 7.085,23.15Q7.085,23.076 7.099,23.004Q7.113,22.931 7.142,22.863Q7.17,22.795 7.211,22.733Q7.252,22.672 7.304,22.62Q7.357,22.567 7.418,22.526Q7.479,22.485 7.548,22.457Q7.616,22.429 7.688,22.414Q7.761,22.4 7.835,22.4L7.835,22.4L7.843,22.4L7.843,22.4Q7.917,22.4 7.989,22.414Q8.062,22.429 8.13,22.457Q8.198,22.485 8.26,22.526Q8.321,22.567 8.373,22.62Q8.425,22.672 8.467,22.733Q8.508,22.795 8.536,22.863Q8.564,22.931 8.578,23.004Q8.593,23.076 8.593,23.15Q8.593,23.224 8.578,23.296Q8.564,23.369 8.536,23.437Q8.508,23.505 8.467,23.567Q8.425,23.628 8.373,23.68Q8.321,23.732 8.26,23.773Q8.198,23.814 8.13,23.843Q8.062,23.871 7.989,23.885Q7.917,23.9 7.843,23.9L7.843,23.9L7.835,23.9Z"
        android:fillColor="#31456A"
        android:fillAlpha="0.6"
        android:fillType="evenOdd"/>
  </group>
</vector>
app/src/main/res/layout/activity_accident_detail.xml
@@ -158,11 +158,11 @@
                                tools:text="11" />
                            <androidx.appcompat.widget.AppCompatImageView
                                src="@{viewModel.icon1}"
                                android:layout_width="@dimen/dp_4"
                                android:layout_height="@dimen/dp_24"
                                android:layout_marginHorizontal="@dimen/dp_3"
                                android:layout_marginTop="@dimen/dp_3"
                                src="@{viewModel.icon1}"
                                tools:src="@mipmap/ic_task_item_colon_b" />
                            <androidx.appcompat.widget.AppCompatTextView
@@ -178,10 +178,10 @@
                                tools:text="33" />
                            <androidx.appcompat.widget.AppCompatImageView
                                src="@{viewModel.icon1}"
                                android:layout_width="@dimen/dp_4"
                                android:layout_height="@dimen/dp_24"
                                android:layout_marginHorizontal="@dimen/dp_3"
                                src="@{viewModel.icon1}"
                                android:layout_marginTop="@dimen/dp_3"
                                tools:src="@mipmap/ic_task_item_colon_b" />
@@ -435,11 +435,11 @@
                        </LinearLayout>
<!--                        show="@{viewModel.taskDetail.status == 1}"-->
                        <!--                        show="@{viewModel.taskDetail.status == 1}"-->
                        <LinearLayout
                            android:baselineAligned="false"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:baselineAligned="false"
                            android:orientation="horizontal">
                            <LinearLayout
@@ -449,7 +449,7 @@
                                android:layout_marginTop="@dimen/dp_12"
                                android:layout_marginEnd="@dimen/dp_6"
                                android:layout_weight="1"
                                android:background="@drawable/shape_blue1_bg_4"
                                android:background="@drawable/shape_gray2_bg_4"
                                android:gravity="center"
                                android:onClick="@{viewModel.onClick}"
                                android:orientation="horizontal"
@@ -457,22 +457,34 @@
                                app:layout_constraintRight_toLeftOf="@+id/unlockBox"
                                app:layout_constraintTop_toBottomOf="@+id/icon">
                                <FrameLayout
                                    android:layout_width="@dimen/dp_32"
                                    android:layout_height="@dimen/dp_32"
                                    android:layout_marginStart="@dimen/dp_20">
                                <androidx.appcompat.widget.AppCompatImageView
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_marginStart="@dimen/dp_20"
                                    android:src="@drawable/svg_car_cmjs"
                                    android:tint="@color/blue_5" />
                                    <androidx.appcompat.widget.AppCompatImageView
                                        android:id="@+id/iv_door_status"
                                        android:layout_width="wrap_content"
                                        android:layout_height="wrap_content"
                                        android:src="@drawable/svg_net_lock_gray" />
                                    <androidx.appcompat.widget.AppCompatImageView
                                        android:id="@+id/iv_door_status_loading"
                                        android:layout_width="wrap_content"
                                        android:layout_height="wrap_content"
                                        android:visibility="gone"
                                        android:src="@drawable/svg_circle_loading" />
                                </FrameLayout>
                                <androidx.appcompat.widget.AppCompatTextView
                                    android:id="@+id/tv_door_lock"
                                    android:layout_width="0dp"
                                    android:layout_height="wrap_content"
                                    android:layout_marginEnd="@dimen/dp_20"
                                    android:layout_weight="1"
                                    android:gravity="center"
                                    android:text="车门解锁"
                                    android:textColor="@color/blue_5"
                                    android:textColor="@color/gray_7"
                                    android:textSize="@dimen/sp_14" />
                            </LinearLayout>
@@ -484,7 +496,7 @@
                                android:layout_marginStart="@dimen/dp_6"
                                android:layout_marginTop="@dimen/dp_12"
                                android:layout_weight="1"
                                android:background="@drawable/shape_blue1_bg_4"
                                android:background="@drawable/shape_gray2_bg_4"
                                android:gravity="center"
                                android:onClick="@{viewModel.onClick}"
                                android:orientation="horizontal"
@@ -492,21 +504,34 @@
                                app:layout_constraintRight_toRightOf="parent"
                                app:layout_constraintTop_toBottomOf="@+id/icon">
                                <androidx.appcompat.widget.AppCompatImageView
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_marginStart="@dimen/dp_20"
                                    android:src="@drawable/svg_car_hbxjs"
                                    android:tint="@color/blue_5" />
                                <FrameLayout
                                    android:layout_width="@dimen/dp_32"
                                    android:layout_height="@dimen/dp_32"
                                    android:layout_marginStart="@dimen/dp_20">
                                    <androidx.appcompat.widget.AppCompatImageView
                                        android:id="@+id/iv_trunk_status"
                                        android:layout_width="wrap_content"
                                        android:layout_height="wrap_content"
                                        android:src="@drawable/svg_car_trunk_closed" />
                                    <androidx.appcompat.widget.AppCompatImageView
                                        android:id="@+id/iv_trunk_status_loading"
                                        android:layout_width="wrap_content"
                                        android:layout_height="wrap_content"
                                        android:visibility="gone"
                                        android:src="@drawable/svg_circle_loading" />
                                </FrameLayout>
                                <androidx.appcompat.widget.AppCompatTextView
                                    android:id="@+id/tv_trunk_lock"
                                    android:layout_width="0dp"
                                    android:layout_height="wrap_content"
                                    android:layout_marginEnd="@dimen/dp_20"
                                    android:layout_weight="1"
                                    android:gravity="center"
                                    android:text="后备箱解锁"
                                    android:textColor="@color/blue_5"
                                    android:textColor="@color/gray_7"
                                    android:textSize="@dimen/sp_14" />
                            </LinearLayout>
app/src/main/res/layout/fragment_car_dispatch.xml
@@ -250,25 +250,38 @@
                        android:layout_height="@dimen/dp_48"
                        android:layout_marginHorizontal="@dimen/dp_6"
                        android:layout_weight="1"
                        android:background="@drawable/shape_blue1_bg_4"
                        android:background="@drawable/shape_gray2_bg_4"
                        android:gravity="center"
                        android:orientation="horizontal">
                        <androidx.appcompat.widget.AppCompatImageView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginStart="@dimen/dp_20"
                            android:src="@drawable/svg_car_cmjs"
                            android:tint="@color/blue_5" />
                        <FrameLayout
                            android:layout_width="@dimen/dp_32"
                            android:layout_height="@dimen/dp_32"
                            android:layout_marginStart="@dimen/dp_20">
                            <androidx.appcompat.widget.AppCompatImageView
                                android:id="@+id/iv_door_status"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:src="@drawable/svg_net_lock_gray" />
                            <androidx.appcompat.widget.AppCompatImageView
                                android:id="@+id/iv_door_status_loading"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:visibility="gone"
                                android:src="@drawable/svg_circle_loading" />
                        </FrameLayout>
                        <androidx.appcompat.widget.AppCompatTextView
                            android:id="@+id/tv_door_lock"
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_marginEnd="@dimen/dp_20"
                            android:layout_weight="1"
                            android:gravity="center"
                            android:text="车门解锁"
                            android:textColor="@color/blue_5"
                            android:textColor="@color/gray_7"
                            android:textSize="@dimen/sp_14" />
                    </LinearLayout>
@@ -280,25 +293,38 @@
                        android:layout_height="@dimen/dp_48"
                        android:layout_marginHorizontal="@dimen/dp_6"
                        android:layout_weight="1"
                        android:background="@drawable/shape_blue1_bg_4"
                        android:background="@drawable/shape_gray2_bg_4"
                        android:gravity="center"
                        android:orientation="horizontal">
                        <androidx.appcompat.widget.AppCompatImageView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginStart="@dimen/dp_20"
                            android:src="@drawable/svg_car_hbxjs"
                            android:tint="@color/blue_5" />
                        <FrameLayout
                            android:layout_width="@dimen/dp_32"
                            android:layout_height="@dimen/dp_32"
                            android:layout_marginStart="@dimen/dp_20">
                            <androidx.appcompat.widget.AppCompatImageView
                                android:id="@+id/iv_trunk_status"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:src="@drawable/svg_car_trunk_closed" />
                            <androidx.appcompat.widget.AppCompatImageView
                                android:id="@+id/iv_trunk_status_loading"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:visibility="gone"
                                android:src="@drawable/svg_circle_loading" />
                        </FrameLayout>
                        <androidx.appcompat.widget.AppCompatTextView
                            android:id="@+id/tv_trunk_lock"
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_marginEnd="@dimen/dp_20"
                            android:layout_weight="1"
                            android:gravity="center"
                            android:text="后备箱解锁"
                            android:textColor="@color/blue_5"
                            android:textColor="@color/gray_7"
                            android:textSize="@dimen/sp_14" />
                    </LinearLayout>