| | |
| | | @SerializedName("updateTime") |
| | | val updateTime: String? = null, |
| | | var pointName: String? = null,//收车点位名称 |
| | | |
| | | /** |
| | | * 是否已经打开后备箱 1是 前端字段 |
| | | */ |
| | | val hadTrunkOpened: String? = null |
| | | ) : Parcelable { |
| | | //获取车辆图片 |
| | | fun getShowVehiclePicture(): String { |
| | |
| | | |
| | | //是否已开启后备箱 |
| | | fun hadOpenedTrunk(): Boolean { |
| | | return false |
| | | return hadTrunkOpened == "1" |
| | | } |
| | | //是否正在工作中 |
| | | fun isWorking(): Boolean { |
| | |
| | | * 可以操作到达的配置范围,单位米 |
| | | */ |
| | | @SerializedName("canArriveRange") |
| | | val canArriveRange: Int? = null |
| | | val canArriveRange: Int? = null, |
| | | |
| | | /** |
| | | * 是否已经打开后备箱 1是 前端字段 |
| | | */ |
| | | val hadTrunkOpened: String? = null |
| | | ) { |
| | | |
| | | /** |
| | |
| | | |
| | | //是否已开启后备箱 |
| | | fun hadOpenedTrunk(): Boolean { |
| | | return false |
| | | return hadTrunkOpened == "1" |
| | | } |
| | | } |
| | | |
| New file |
| | |
| | | package com.xw.yunwei.model |
| | | |
| | | //后备箱解锁状态 |
| | | data class TrunkLockStatusInfo(val status: String? = null) |
| | |
| | | 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 |
| | |
| | | /* 获取所有收车点 */ |
| | | @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>> |
| | | } |
| | |
| | | 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) { |
| | |
| | | suspend fun getAllAcceptCarPoints(vehicleId: String): List<AcceptCarPointInfo>? { |
| | | return api.getAllAcceptCarPoints(vehicleId).interceptAwait() |
| | | } |
| | | |
| | | /* 车辆运维-检测后备箱解锁状态 */ |
| | | suspend fun checkTrunkLockStatus(vehicleId: String): Int? { |
| | | return api.checkTrunkLockStatus(vehicleId).interceptAwait() |
| | | } |
| | | } |
| | |
| | | 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 |
| | |
| | | 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 |
| | | |
| | | |
| | |
| | | * |
| | | * @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) |
| | |
| | | checkActionPermissions() |
| | | } |
| | | // 监听是否可确认到达,控制按钮背景色 |
| | | viewModel.canConfirmArrive.observe(this){ |
| | | viewModel.canConfirmArrive.observe(this) { |
| | | if (it) { |
| | | binding.tvControl.setBackgroundResource(R.drawable.shape_blue_5_bg_4) |
| | | } else { |
| | |
| | | } |
| | | } |
| | | // 监听应用权限变化,重新校验按钮权限 |
| | | 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() // 匀速旋转 |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | 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 |
| | |
| | | //车辆位置 |
| | | 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) { |
| | |
| | | */ |
| | | fun queryDetail() { |
| | | launchRequest { |
| | | taskRepository.vehicleAccidentDetail("$taskId")?.let { |
| | | taskRepository.vehicleAccidentDetail("$taskId")?.let { it -> |
| | | taskDetail.postValue(it) |
| | | if (it.status == 0) { |
| | | startCountdown() |
| | |
| | | ) |
| | | loopRefreshCarLocation() |
| | | } |
| | | checkTrunkStatus(it.vehicleId.toString()) { |
| | | taskDetail.postValue(taskDetail.value?.copy(hadTrunkOpened = it.toString())) |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | * @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 = |
| | |
| | | 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) |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | 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 |
| | |
| | | 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())) |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | 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 = |
| | |
| | | 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) |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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() { |
| New file |
| | |
| | | <?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> |
| New file |
| | |
| | | <?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> |
| New file |
| | |
| | | <?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> |
| New file |
| | |
| | | <!-- |
| | | ~ 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> |
| New file |
| | |
| | | <!-- |
| | | ~ 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> |
| New file |
| | |
| | | <!-- |
| | | ~ 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> |
| | |
| | | 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 |
| | |
| | | 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" /> |
| | | |
| | |
| | | |
| | | </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 |
| | |
| | | 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" |
| | |
| | | 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> |
| | |
| | | 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" |
| | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | 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> |