Commit 827d0a40 authored by p x's avatar p x
Browse files

集成一部分http

parent aa341738
package com.sd.shupathwebview.utils package com.sd.cavphmi.utils
import android.content.ContentValues import android.content.ContentValues
import android.content.Context import android.content.Context
...@@ -49,26 +49,29 @@ object FileIoUtils { ...@@ -49,26 +49,29 @@ object FileIoUtils {
suspend fun getAssetMock(context: Context, fileName: String, dst: MutableList<String>): Int { suspend fun getAssetMock(context: Context, fileName: String, dst: MutableList<String>): Int {
val assetManager = context.assets return withContext(Dispatchers.IO) {
var bf: BufferedReader? = null val assetManager = context.assets
try { var bf: BufferedReader? = null
val inputReader = InputStreamReader(assetManager.open(fileName)) try {
bf = BufferedReader(inputReader) val inputReader = InputStreamReader(assetManager.open(fileName))
var line = "" bf = BufferedReader(inputReader)
while (!bf.run { var line = ""
line = readLine() while (!bf.run {
return@run line line = readLine()
}.isNullOrEmpty()) { return@run line
dst.add(line) }.isNullOrEmpty()) {
dst.add(line)
}
bf?.close()
return@withContext 1
} catch (e: IOException) {
e.printStackTrace()
} finally {
bf?.close()
} }
bf?.close() return@withContext 0
return 1
} catch (e: IOException) {
e.printStackTrace()
} finally {
bf?.close()
} }
return 0
} }
/** /**
......
package com.ltzw.adasdriver.utils package com.sd.cavphmi.utils
import android.os.Build import android.os.Build
......
...@@ -3,7 +3,7 @@ package com.sd.cavphmi.utils ...@@ -3,7 +3,7 @@ package com.sd.cavphmi.utils
object MyContants { object MyContants {
const val IS_DEBUG = true const val IS_DEBUG = true
var HOST = if (IS_DEBUG) "https://sip-avp.isungent.cn:8443" else "" var HOST = if (IS_DEBUG) "https://faw.cuscavp.cn:8443" else ""
// var PORT = if (IS_DEBUG) "123" else "34534" // var PORT = if (IS_DEBUG) "123" else "34534"
//wss://faw.cuscavp.cn:8443/socket/ws?clientSource=100 长春 //wss://faw.cuscavp.cn:8443/socket/ws?clientSource=100 长春
...@@ -11,5 +11,7 @@ object MyContants { ...@@ -11,5 +11,7 @@ object MyContants {
if (IS_DEBUG) "wss://faw.cuscavp.cn:8443/socket/ws?clientSource=100" else "" if (IS_DEBUG) "wss://faw.cuscavp.cn:8443/socket/ws?clientSource=100" else ""
/***已经**/
const val ALREADT_ONCE = -1
} }
\ No newline at end of file
...@@ -9,6 +9,9 @@ import android.net.Uri ...@@ -9,6 +9,9 @@ import android.net.Uri
import android.os.Build import android.os.Build
import android.os.PowerManager import android.os.PowerManager
import android.provider.Settings import android.provider.Settings
import android.telephony.PhoneStateListener
import android.telephony.SignalStrength
import android.telephony.TelephonyCallback
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
...@@ -17,7 +20,6 @@ import android.widget.EditText ...@@ -17,7 +20,6 @@ import android.widget.EditText
import androidx.annotation.RequiresPermission import androidx.annotation.RequiresPermission
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import com.ltzw.adasdriver.utils.MobileUtils
import java.io.File import java.io.File
...@@ -69,7 +71,8 @@ object SystemUtils { ...@@ -69,7 +71,8 @@ object SystemUtils {
fun getAppVersionName(context: Context): String { fun getAppVersionName(context: Context): String {
var version = "0" var version = "0"
try { try {
version = context.packageManager.getPackageInfo(context.packageName, 0).versionName.toString() version =
context.packageManager.getPackageInfo(context.packageName, 0).versionName.toString()
} catch (e: PackageManager.NameNotFoundException) { } catch (e: PackageManager.NameNotFoundException) {
throw RuntimeException("the application not found") throw RuntimeException("the application not found")
} }
...@@ -208,6 +211,7 @@ object SystemUtils { ...@@ -208,6 +211,7 @@ object SystemUtils {
"doc" -> type = "application/msword" "doc" -> type = "application/msword"
"docx" -> type = "docx" -> type =
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
"xls", "xlsx" -> type = "application/vnd.ms-excel" "xls", "xlsx" -> type = "application/vnd.ms-excel"
"txt" -> type = "text/plain" "txt" -> type = "text/plain"
else -> type = "*/*" else -> type = "*/*"
...@@ -242,9 +246,11 @@ object SystemUtils { ...@@ -242,9 +246,11 @@ object SystemUtils {
"ppt" -> type = "application/vnd.ms-powerpoint" "ppt" -> type = "application/vnd.ms-powerpoint"
"pptx" -> type = "pptx" -> type =
"application/vnd.openxmlformats-officedocument.presentationml.presentation" "application/vnd.openxmlformats-officedocument.presentationml.presentation"
"doc" -> type = "application/msword" "doc" -> type = "application/msword"
"docx" -> type = "docx" -> type =
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
"xls" -> type = "application/vnd.ms-excel" "xls" -> type = "application/vnd.ms-excel"
"xlsx" -> type = "application/vnd.ms-excel" "xlsx" -> type = "application/vnd.ms-excel"
"txt" -> type = "text/plain" "txt" -> type = "text/plain"
...@@ -293,4 +299,13 @@ object SystemUtils { ...@@ -293,4 +299,13 @@ object SystemUtils {
} }
fun getMobileNetworkSignal(context: Context) :Int{
var telephonyManager =
context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
var signalStrength = telephonyManager.signalStrength
var list =signalStrength?.cellSignalStrengths
return 1
}
} }
\ No newline at end of file
package com.sd.cavphmi.viewmodels package com.sd.cavphmi.viewmodels
import android.content.Context import android.content.Context
import android.telephony.PhoneStateListener
import android.telephony.SignalStrength
import android.telephony.TelephonyCallback
import android.telephony.TelephonyManager
import androidx.databinding.ObservableField import androidx.databinding.ObservableField
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
...@@ -8,36 +12,36 @@ import androidx.lifecycle.viewModelScope ...@@ -8,36 +12,36 @@ import androidx.lifecycle.viewModelScope
import com.google.gson.Gson import com.google.gson.Gson
import com.sd.cavphmi.base.MyBaseViewModel import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.bean.CarVehicle import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.OrderBean
import com.sd.cavphmi.bean.PerTarget import com.sd.cavphmi.bean.PerTarget
import com.sd.cavphmi.bean.ReqBean import com.sd.cavphmi.bean.ReqBean
import com.sd.cavphmi.bean.SpaceNoBean
import com.sd.cavphmi.bean.VToXImgBean import com.sd.cavphmi.bean.VToXImgBean
import com.sd.cavphmi.bean.VehicleStats import com.sd.cavphmi.bean.VehicleStats
import com.sd.cavphmi.bean.WebSetBean import com.sd.cavphmi.bean.WebSetBean
import com.sd.cavphmi.net.MyResult import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.repositorys.ParseSocketRepo import com.sd.cavphmi.repositorys.ParseSocketRepo
import com.sd.cavphmi.repositorys.SpaceNoRepo import com.sd.cavphmi.utils.DateUtils
import com.sd.cavphmi.utils.FileIoUtils
import com.sd.cavphmi.utils.MyContants import com.sd.cavphmi.utils.MyContants
import com.sd.cavphmi.utils.SystemUtils
import com.sd.cavphmi.utils.ToastHelper import com.sd.cavphmi.utils.ToastHelper
import com.sd.cavphmi.websockets.MyWebSocketClient import com.sd.cavphmi.websockets.MyWebSocketClient
import com.sd.shupathwebview.utils.FileIoUtils
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.java_websocket.handshake.ServerHandshake import org.java_websocket.handshake.ServerHandshake
import protocol.Response import protocol.Response
import java.net.URI import java.net.URI
import java.nio.ByteBuffer import java.util.Timer
import java.util.TimerTask
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
class MainVm @Inject constructor( class MainVm @Inject constructor(
@ApplicationContext var context: Context, @ApplicationContext private var context: Context,
private var parseSocketRepo: ParseSocketRepo private var parseSocketRepo: ParseSocketRepo
// var spaceNoRepo: SpaceNoRepo // var spaceNoRepo: SpaceNoRepo,
) : MyBaseViewModel() { ) : MyBaseViewModel() {
private var client: MyWebSocketClient? = null private var client: MyWebSocketClient? = null
...@@ -54,19 +58,64 @@ class MainVm @Inject constructor( ...@@ -54,19 +58,64 @@ class MainVm @Inject constructor(
//感知目标物 //感知目标物
var targetPre = MutableLiveData<PerTarget>() var targetPre = MutableLiveData<PerTarget>()
//订单信息
var orderBean = MutableLiveData<OrderBean>()
//驾驶模式 //驾驶模式
var driveMode = ObservableField("") var driveMode = ObservableField("")
//航向角 //航向角
var heading = ObservableField(550) var heading = ObservableField(550)
//速度 //速度
var speed = ObservableField(0f) var speed = ObservableField(0f)
fun startWS() { //当前时间
val httpHeaders = mutableMapOf<String, String>() var curTime = ObservableField("")
httpHeaders.put("Cookie", "username=nemo")
//网络延时时间差
var timeOutDiff = ObservableField(-1)
// Timer 可用于执行延迟任务或循环任务
private var curTimer = Timer()
// Timer 可用于执行延迟任务或循环任务
private var netSingTimer = Timer()
/***获取当前时间**/
fun getCurrentTime() {
curTimer.schedule(object : TimerTask() {
override fun run() {
var time = DateUtils.getCurrentTime12HourFormat()
curTime.set(time)
}
}, 2000, 1000 * 60)
}
/***获取信号强度**/
fun getMobileNetworkSignal() {
netSingTimer.schedule(object : TimerTask() {
override fun run() {
viewModelScope.launch {
var result = parseSocketRepo.getTimeOut()
when (result) {
is MyResult.Success<Int> -> {
timeOutDiff.set(result.data)
// println("-------时间差---- = ${result.data}")
}
else -> {
// println("-------Error---- = ${result.msg}")
}
}
}
}
}, 5000, 1000 * 60)
}
fun startWS() {
// val httpHeaders = mutableMapOf<String, String>()
// httpHeaders.put("Cookie", "username=nemo")
try { try {
client = MyWebSocketClient(URI(MyContants.WS_HOST)) client = MyWebSocketClient(URI(MyContants.WS_HOST))
client?.onSocketCb = onSocketCb client?.onSocketCb = onSocketCb
...@@ -77,7 +126,15 @@ class MainVm @Inject constructor( ...@@ -77,7 +126,15 @@ class MainVm @Inject constructor(
} }
} }
fun closeWS() { /***清理资源***/
fun cleanRes() {
curTimer.cancel()
netSingTimer.cancel()
closeWS()
}
private fun closeWS() {
if (client?.isOpen ?: false) { if (client?.isOpen ?: false) {
client?.close() client?.close()
} }
...@@ -86,7 +143,6 @@ class MainVm @Inject constructor( ...@@ -86,7 +143,6 @@ class MainVm @Inject constructor(
private var onSocketCb = object : MyWebSocketClient.OnSocketCb { private var onSocketCb = object : MyWebSocketClient.OnSocketCb {
override fun onOpen(handshakedata: ServerHandshake?) { override fun onOpen(handshakedata: ServerHandshake?) {
println("--------Thread.currentThread() = ${Thread.currentThread()}") println("--------Thread.currentThread() = ${Thread.currentThread()}")
} }
override fun onClose(code: Int, reason: String?, remote: Boolean) { override fun onClose(code: Int, reason: String?, remote: Boolean) {
...@@ -101,17 +157,29 @@ class MainVm @Inject constructor( ...@@ -101,17 +157,29 @@ class MainVm @Inject constructor(
override fun onVehicle(res: Response.SocketResponse) { override fun onVehicle(res: Response.SocketResponse) {
viewModelScope.launch { viewModelScope.launch {
val bean = val bean =
parseSocketRepo.genDataBean(res.data, CarVehicle::class.java) parseSocketRepo.parseDataBean(res.data, CarVehicle::class.java)
println("---车辆位姿数据 = ${bean}") println("---车辆位姿数据 = ${bean}")
var result =
parseSocketRepo.getOrderData(bean.vehicleData?.get(0)?.vehiclePlate ?: "")
when (result) {
is MyResult.Success<OrderBean> -> {
println("-------订单信息---- = ${result.data}")
orderBean.value = result.data
}
else -> {
// println("-------Error---- = ${result.msg}")
}
}
carVehicle.value = bean carVehicle.value = bean
FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt") // FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
} }
} }
override fun onVehicleStats(res: Response.SocketResponse) { override fun onVehicleStats(res: Response.SocketResponse) {
viewModelScope.launch { viewModelScope.launch {
val bean = val bean =
parseSocketRepo.genDataBean(res.data, VehicleStats::class.java) parseSocketRepo.parseDataBean(res.data, VehicleStats::class.java)
println("---联网车辆状态数据 = ${bean}") println("---联网车辆状态数据 = ${bean}")
vehicleStat.value = bean vehicleStat.value = bean
...@@ -121,10 +189,10 @@ class MainVm @Inject constructor( ...@@ -121,10 +189,10 @@ class MainVm @Inject constructor(
override fun onTarget(res: Response.SocketResponse) { override fun onTarget(res: Response.SocketResponse) {
viewModelScope.launch { viewModelScope.launch {
var bean = parseSocketRepo.genDataBean(res.data, PerTarget::class.java) var bean = parseSocketRepo.parseDataBean(res.data, PerTarget::class.java)
println("---感知目标物数据 = ${bean}") println("---感知目标物数据 = ${bean}")
targetPre.value = bean targetPre.value = bean
FileIoUtils.writeToFile(gson.toJson(bean), "target.txt") // FileIoUtils.writeToFile(gson.toJson(bean), "target.txt")
} }
} }
......
package com.sd.cavphmi.viewmodels
import android.content.Context
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.OrderBean
import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.repositorys.ParseSocketRepo
import com.sd.cavphmi.utils.FileIoUtils
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class MockVM @Inject constructor(
@ApplicationContext var context: Context,
private var parseSocketRepo: ParseSocketRepo
) : MyBaseViewModel() {
//车辆位姿数据
var carVehicle = MutableLiveData<CarVehicle>()
//订单信息
var orderBean = MutableLiveData<OrderBean>()
fun onVehicleMock() {
viewModelScope.launch {
var dst = mutableListOf<String>()
FileIoUtils.getAssetMock(context, "mock/carvehicle.txt", dst)
dst.forEach { str ->
delay(3000)
val bean =
parseSocketRepo.parseDataBean(str, CarVehicle::class.java)
println("---模拟车辆位姿数据 = ${bean}")
var result =
parseSocketRepo.getOrderData(bean.vehicleData?.get(0)?.vehiclePlate ?: "")
when (result) {
is MyResult.Success<OrderBean> -> {
println("-------订单信息---- = ${result.data}")
orderBean.value=result.data
}
else -> {
// println("-------Error---- = ${result.msg}")
}
}
carVehicle.value = bean
}
}
}
}
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M22,5.7l-4.6,-3.9 -1.3,1.5 4.6,3.9L22,5.7zM7.9,3.4L6.6,1.9 2,5.7l1.3,1.5 4.6,-3.8zM12.5,8L11,8v6l4.7,2.9 0.8,-1.2 -4,-2.4L12.5,8zM12,4c-5,0 -9,4 -9,9s4,9 9,9 9,-4 9,-9 -4,-9 -9,-9zM12,20c-3.9,0 -7,-3.1 -7,-7s3.1,-7 7,-7 7,3.1 7,7 -3.1,7 -7,7z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z"/>
<path android:fillColor="@android:color/white" android:pathData="M12.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M11.8,10.9c-2.27,-0.59 -3,-1.2 -3,-2.15 0,-1.09 1.01,-1.85 2.7,-1.85 1.78,0 2.44,0.85 2.5,2.1h2.21c-0.07,-1.72 -1.12,-3.3 -3.21,-3.81V3h-3v2.16c-1.94,0.42 -3.5,1.68 -3.5,3.61 0,2.31 1.91,3.46 4.7,4.13 2.5,0.6 3,1.48 3,2.41 0,0.69 -0.49,1.79 -2.7,1.79 -2.06,0 -2.87,-0.92 -2.98,-2.1h-2.2c0.12,2.19 1.76,3.42 3.68,3.83V21h3v-2.15c1.95,-0.37 3.5,-1.5 3.5,-3.55 0,-2.84 -2.43,-3.81 -4.7,-4.4z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M17,3H7c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3V5c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp" />
<solid android:color="#80E4E4EB" />
<stroke
android:width="2dp"
android:color="#c4cdd6" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<data> <data>
...@@ -9,6 +10,10 @@ ...@@ -9,6 +10,10 @@
name="vm" name="vm"
type="com.sd.cavphmi.viewmodels.MainVm" /> type="com.sd.cavphmi.viewmodels.MainVm" />
<variable
name="order"
type="com.sd.cavphmi.bean.OrderBean" />
</data> </data>
<RelativeLayout <RelativeLayout
...@@ -64,8 +69,9 @@ ...@@ -64,8 +69,9 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="2dp" android:layout_marginLeft="2dp"
android:text="场外行驶" android:textColor="#3c62e3"
android:textColor="#3c62e3" /> app:showAvpStatus="@{order.avpStatus}"
tools:text="场外行驶" />
</LinearLayout> </LinearLayout>
...@@ -103,17 +109,17 @@ ...@@ -103,17 +109,17 @@
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/xinhao1" /> app:showXinhao="@{vm.timeOutDiff}" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/ll_head" android:layout_below="@+id/ll_head"
android:layout_alignParentRight="true"
android:orientation="vertical" android:orientation="vertical"
android:src="#907867"> android:src="#907867">
...@@ -151,19 +157,18 @@ ...@@ -151,19 +157,18 @@
android:id="@+id/bt_chewei" android:id="@+id/bt_chewei"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="更新停车位" /> android:text="停车位变更" />
</LinearLayout> </LinearLayout>
<RelativeLayout <RelativeLayout
android:layout_width="280dp" android:layout_width="280dp"
android:layout_height="wrap_content" android:layout_height="70dp"
android:layout_centerHorizontal="true"> android:layout_centerHorizontal="true">
<ImageView <ImageView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:src="@drawable/speed" /> android:src="@drawable/speed" />
...@@ -173,16 +178,17 @@ ...@@ -173,16 +178,17 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:layout_marginTop="2dp" android:layout_marginTop="5dp"
android:text="@{vm.curTime}"
android:textColor="@color/text_black" android:textColor="@color/text_black"
tools:text="9:19" /> tools:text="9:19" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/tv_time" android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:layout_marginTop="10dp" android:layout_marginBottom="5dp"
android:textColor="@color/text_black" android:textColor="@color/text_black"
android:textSize="12sp" android:textSize="12sp"
app:showSpeed="@{vm.speed}" app:showSpeed="@{vm.speed}"
...@@ -192,6 +198,15 @@ ...@@ -192,6 +198,15 @@
</RelativeLayout> </RelativeLayout>
<include
layout="@layout/order_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_head"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
bind:order="@{order}" />
</RelativeLayout> </RelativeLayout>
</layout> </layout>
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="order"
type="com.sd.cavphmi.bean.OrderBean" />
</data>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/order_bg"
android:orientation="vertical"
android:padding="15dp"
android:visibility="gone"
app:showOrderLayout="@{order.avpStatus}">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bookmark_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@{order.orderNo}"
android:textColor="@color/text_black"
tools:text="32423427364862386482368462" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/access_alarms_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@{order.durationString}"
android:textColor="@color/text_black"
tools:text="1小时29分钟" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/access_time_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="@{order.enterTime}"
android:textColor="@color/text_black"
tools:text="2025-06-18 09:16:51" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/attach_money_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
app:showOrderCost="@{order.actualCost}"
android:textColor="@color/text_black"
tools:text="2025-06-18 09:16:51" />
</LinearLayout>
</LinearLayout>
</layout>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment