[taxi-u-p]
[启动自驾和手机号验证]
This commit is contained in:
yangyakun
2023-12-11 19:16:55 +08:00
parent a778d20c44
commit af7d211ad0
83 changed files with 1096 additions and 374 deletions

View File

@@ -0,0 +1,239 @@
package com.mogo.och.common.module.utils
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.widget.ImageView
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import java.lang.ref.SoftReference
import java.util.concurrent.ArrayBlockingQueue
import java.util.concurrent.Future
class BigFrameAnimatorContainer (resId: Int,
fps: Int,
imageView: ImageView,
isOnce: Boolean = false,// 一次性的 true 值播放一次 false 重复播放
initFirstFrame:Boolean = true,
width:Int = -1,
height:Int = -1){
private val TAG = "BigFrameAnimatorContainer"
private lateinit var mFrames: IntArray // 帧数组
private var mIndex = 0 // 当前帧
private var mShouldRun = false // 开始/停止播放用
private var mIsRunning = false // 动画是否正在播放,防止重复播放
private var mSoftReferenceImageView: SoftReference<ImageView>? = null // 软引用ImageView以便及时释放掉
private var mHandler: Handler? = null
private var mDelayMillis = 0
private var mOnAnimationStoppedListener: OnAnimationStoppedListener? = null//播放停止监听
var isOnce:Boolean = false
private val readQueue = ArrayBlockingQueue<Pair<Bitmap,BitmapFactory.Options>>(8,true)
private val writeQueue = ArrayBlockingQueue<Pair<Bitmap,BitmapFactory.Options>>(8,true)
private var currentPoll:Pair<Bitmap,BitmapFactory.Options>?=null
private var decodeImage: Future<*>?=null
init {
createAnimation(imageView, getData(resId), fps,initFirstFrame,width,height)
this.isOnce = isOnce
}
private fun createAnimation(
imageView: ImageView,
frames: IntArray,
fps: Int,
initFirstFrame: Boolean,
width: Int,
height: Int
) {
mHandler = object: Handler(Looper.myLooper()!!){
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
CallerLogger.d(TAG,"消息类型:${msg.what}")
if(msg.what==0){
val imageView = mSoftReferenceImageView!!.get()
if (!mShouldRun || imageView == null) {
mIsRunning = false
if (mOnAnimationStoppedListener != null) {
mOnAnimationStoppedListener!!.AnimationStopped()
}
return
}
mIsRunning = true
//新开线程去读下一帧
if (imageView.isShown) {
if (!mShouldRun) {
mIsRunning = false
CallerLogger.d(TAG,"暂停播放")
if (mOnAnimationStoppedListener != null) {
mOnAnimationStoppedListener!!.AnimationStopped()
}
return
}
mHandler?.sendEmptyMessageDelayed(0,mDelayMillis.toLong())
if(currentPoll!=null){
writeQueue.offer(currentPoll)
currentPoll = null
}
currentPoll = readQueue.poll()
if(currentPoll!=null){
val bitmap = currentPoll!!.first
imageView.setImageBitmap(bitmap)
}else{
CallerLogger.d(TAG,"加载过慢了")
}
}
}
}
}
mFrames = frames
mIndex = -1
mSoftReferenceImageView = SoftReference(imageView)
mShouldRun = false
mIsRunning = false
mDelayMillis = 1000 / fps //帧动画时间间隔,毫秒
CallerLogger.d(TAG,"两帧时间:${mDelayMillis}")
if(initFirstFrame) {
imageView.setImageResource(mFrames[0])
}
var widthImage = -1
var heightImage = -1
var config = Bitmap.Config.ARGB_8888
if(width>0&&height>0){
widthImage = width
heightImage = height
}else{
try {
val bmp = (imageView.drawable as BitmapDrawable).bitmap
widthImage = bmp.width
heightImage = bmp.height
config = bmp.config
}catch (e:Exception){
throw RuntimeException("请设置图片或传递大小")
}
}
// 当图片大小类型相同时进行复用避免频繁GC
for (i in 0..7) {
val mBitmap = Bitmap.createBitmap(widthImage, heightImage, config)
val mBitmapOptions = BitmapFactory.Options()
//设置Bitmap内存复用
mBitmapOptions.inBitmap = mBitmap //Bitmap复用内存块类似对象池避免不必要的内存分配和回收
mBitmapOptions.inMutable = true //解码时返回可变Bitmap
mBitmapOptions.inSampleSize = 1 //缩放比例
writeQueue.add(Pair(mBitmap,mBitmapOptions))
}
decodeImage = ThreadUtils.getIoPool().submit {
while (true) {
val startTime = System.currentTimeMillis()
val (bitmap1, options) = writeQueue.take()
val index: Int = next
val imageRes: Int = mFrames[index]
var bitmap: Bitmap? = null
try {
bitmap = BitmapFactory.decodeResource(
imageView.resources,
imageRes,
options
)
options.inBitmap = bitmap
} catch (e: Exception) {
e.printStackTrace()
}
if (bitmap != null) {
readQueue.put(Pair(bitmap, options))
}
val dexTime = System.currentTimeMillis() - startTime
CallerLogger.d(TAG, "decode用时${dexTime}ms index ${index}")
}
}
}
//循环读取下一帧
private val next: Int
get() {
mIndex++
if (mIndex >= mFrames.size){
mIndex = 0
}
return mIndex
}
@Synchronized
fun reStart(){
mIndex = 0
mIsRunning = false
start()
}
fun release(){
mShouldRun = false
decodeImage?.cancel(true)
}
/**
* 播放动画,同步锁防止多线程读帧时,数据安全问题
*/
@Synchronized
fun start() {
mShouldRun = true
if (mIsRunning) return
mHandler?.removeCallbacksAndMessages(null)
mHandler?.sendEmptyMessage(0)
}
/**
* 停止播放
*/
@Synchronized
fun stop() {
mShouldRun = false
}
fun isPlaying():Boolean{
return mShouldRun
}
/**
* 设置停止播放监听
* @param listener 设置监听
*/
fun setOnAnimStopListener(listener: OnAnimationStoppedListener?) {
mOnAnimationStoppedListener = listener
}
/**
* 从xml中读取帧数组
* @param resId
* @return
*/
fun getData(resId: Int): IntArray {
val array = AbsMogoApplication.getApp().resources.obtainTypedArray(resId)
val len = array.length()
val intArray = IntArray(array.length())
for (i in 0 until len) {
intArray[i] = array.getResourceId(i, 0)
}
array.recycle()
return intArray
}
fun setData(mFrames: IntArray){
this.mFrames = mFrames
}
/**
* 停止播放监听
*/
interface OnAnimationStoppedListener {
fun AnimationStopped()
}
}

View File

@@ -63,8 +63,8 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) :
when (TaxiPassengerModel.curOrderStatus) {
TaxiPassengerOrderStatusEnum.OnTheWayToStart -> {
// 10 接驾中
mView?.showOrHideStartAutopilotView(isShow = false)
mView?.showOrHidePressengerCheckPager(isShow = false)
mView?.showOrHideCheckAndStartAutopilotView(2)
mView?.showOrHideArrivedEndLayout(isShow = false)
overMapViewClear()
}
@@ -72,55 +72,56 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) :
TaxiPassengerOrderStatusEnum.ArriveAtStart -> {
// 20 司机到达上车点
mView?.showOrHideArrivedEndLayout(isShow = false)
mView?.showOrHidePressengerCheckPager(true)
mView?.showOrHideStartAutopilotView(isShow = false)
mView?.showOrHideCheckAndStartAutopilotView(0)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.UserArriveAtStart -> {
// 30 乘客到达上车点
mView?.showOrHideArrivedEndLayout(isShow = false)
mView?.showOrHidePressengerCheckPager(isShow = false)
mView?.showOrHideStartAutopilotView(isShow = true)
mView?.showOrHideCheckAndStartAutopilotView(1)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> {
// 服务中(去往目的地)
mView?.showOrHideArrivedEndLayout(isShow = false)
mView?.showOrHidePressengerCheckPager(isShow = false)
mView?.showOrHideStartAutopilotView(isShow = false)
mView?.showOrHideCheckAndStartAutopilotView(2)
mView?.tipXiaoZhi()
overMapViewShow()
}
TaxiPassengerOrderStatusEnum.ArriveAtEnd -> {
// 50 到达终点 乘客可以评价
mView?.showOrHideArrivedEndLayout(true)
mView?.showOrHidePressengerCheckPager(isShow = false)
mView?.showOrHideStartAutopilotView(isShow = false)
mView?.showOrHideCheckAndStartAutopilotView(2)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.JourneyCompleted -> {
// 60 行程完成
mView?.showOrHideStartAutopilotView(isShow = false)
mView?.showOrHidePressengerCheckPager(isShow = false)
mView?.showOrHideCheckAndStartAutopilotView(2)
mView?.showOrHideArrivedEndLayout(false)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.Cancel -> {
// 70 取消订单
mView?.showOrHideStartAutopilotView(isShow = false)
mView?.showOrHidePressengerCheckPager(isShow = false)
mView?.showOrHideCheckAndStartAutopilotView(2)
mView?.showOrHideArrivedEndLayout(isShow = false)
overMapViewClear()
}
TaxiPassengerOrderStatusEnum.None -> {
// 00 默认状态,在不同任务之间切换时使用
mView?.showOrHideStartAutopilotView(isShow = false)
mView?.showOrHidePressengerCheckPager(isShow = false)
mView?.showOrHideCheckAndStartAutopilotView(2)
mView?.showOrHideArrivedEndLayout(isShow = false)
overMapViewClear()
}

View File

@@ -19,15 +19,15 @@ import com.mogo.och.taxi.passenger.ui.statusview.StatusBarView;
@Route( path = MogoServicePaths.PATH_STATUS_VIEW_MANAGER )
public class StatusViewManager implements IStatusViewLayout {
private StatusBarView statusBarView;
@NonNull
@Override
public View getStatusView(Context context) {
return new StatusBarView(context);
return statusBarView;
}
@Override
public void init(Context context) {
statusBarView = new StatusBarView(context);
}
}

View File

@@ -2,15 +2,17 @@ package com.mogo.och.taxi.passenger.ui
import android.os.Bundle
import android.view.View
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.commons.mvp.MvpFragment
import com.mogo.commons.voice.AIAssist
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.function.api.hmi.view.IStatusViewLayout
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P
import com.mogo.eagle.core.utilcode.util.DeviceUtils
import com.mogo.eagle.core.utilcode.util.OverlayViewUtils
import com.mogo.map.listener.IMogoMapListener
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.och.common.module.utils.FrameAnimatorContainer
@@ -19,10 +21,11 @@ import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter
import com.mogo.och.taxi.passenger.ui.bottom.BottomBar
import com.mogo.och.taxi.passenger.ui.check.TaxiPassengerCheckView
import com.mogo.och.taxi.passenger.ui.startautopilot.StartAutopilotView
import com.mogo.och.taxi.passenger.ui.statusview.StatusBarView
import io.reactivex.disposables.Disposable
import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.arrivedView
import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.bottom
import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.chekAndStartAutopilotView
import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.ck_setting
import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.clSettingView
import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.infoVideoView
@@ -33,7 +36,6 @@ import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.pcnActionView
import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.romaDistanceView
import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.romaPView
import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.rv_location_center
import java.lang.ref.WeakReference
/**
* 网约车基础Fragment主要负责布局通用界面处理站点面板和通话面板互斥情况
@@ -47,18 +49,13 @@ class TaxiPassengerBaseFragment() :
MvpFragment<TaxiPassengerBaseFragment?, BaseTaxiPassengerPresenter?>(), IMogoMapListener,
TaxiPassengerTaxiView {
/**
* 手机号后四位验证
*/
private var mArrivedCheckView: WeakReference<TaxiPassengerCheckView?>? = null
/**
* 启动自驾页面
*/
private var mStartAutopilotView: WeakReference<StartAutopilotView?>? = null
private var createProgressDialogAnim: FrameAnimatorContainer?=null
private var tipXiaoZhiDelay: Disposable?=null
private var statusBarView: StatusBarView? = null
override fun getLayoutId(): Int {
return R.layout.taxt_u_p_base_fragment
}
@@ -77,6 +74,14 @@ class TaxiPassengerBaseFragment() :
overMapView.onCreateView(savedInstanceState)
overMapView.hideResetView()
(ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_VIEW_MANAGER)
.navigation() as? IStatusViewLayout)?.apply {
val statusView = getStatusView(requireContext())
if (statusView is StatusBarView) {
statusBarView = statusView
}
}
// createProgressDialogAnim = FrameAnimatorContainer(R.array.xiaozhi_normal, 20,aciv_xiaozhi_normal)
// createProgressDialogAnim?.setOnAnimStopListener(object : FrameAnimatorContainer.OnAnimationStoppedListener{
// override fun AnimationStopped() {
@@ -242,34 +247,39 @@ class TaxiPassengerBaseFragment() :
overMapView.setDebugMode(true)
}
/**
* 显示或者隐藏乘客可点击自动驾驶页面
* 乘客验证成功,页面显示,按钮置于不可点击
* 司机端确认可点击开启自动驾驶, 按钮置为可点击
* 订单前往目的地,页面消失
*
* @param isShow
*/
fun showOrHideStartAutopilotView(isShow: Boolean) {
if (isShow) {
exitFullVideoScreen(false)
if (mStartAutopilotView == null || mStartAutopilotView!!.get() == null) {
mStartAutopilotView = WeakReference(StartAutopilotView(requireContext()))
fun showOrHideCheckAndStartAutopilotView(status:Int){
when (status) {
0 -> {
chekAndStartAutopilotView.visibility = View.VISIBLE
statusBarView?.visibility = View.GONE
chekAndStartAutopilotView.resetCheckView()
}
mStartAutopilotView?.get()?.let {
OverlayViewUtils.showOverlayView(activity, it)
1 -> {
chekAndStartAutopilotView.visibility = View.VISIBLE
statusBarView?.visibility = View.GONE
chekAndStartAutopilotView.startAnimation2StartAutopilit()
}
} else {
mStartAutopilotView?.get()?.let {
OverlayViewUtils.dismissOverlayView(it)
RxUtils.createSubscribe(30_000) {
VoiceNotice.showNotice("想和我对话的时候可以直接戳我,也可以对我说\\'你好小智\\'", AIAssist.LEVEL2)
}
2 -> {
chekAndStartAutopilotView.visibility = View.GONE
statusBarView?.visibility = View.VISIBLE
chekAndStartAutopilotView.resetCheckView()
}
mStartAutopilotView = null
else -> {}
}
}
fun tipXiaoZhi(){
RxUtils.disposeSubscribe(tipXiaoZhiDelay)
tipXiaoZhiDelay = RxUtils.createSubscribe(30_000) {
VoiceNotice.showNotice(
"想和我对话的时候可以直接戳我,也可以对我说\\'你好小智\\'",
AIAssist.LEVEL2
)
}
}
/**
* 显示或者隐藏到达乘客站点的洁面
* ① 取消订单 可有可无
@@ -302,33 +312,6 @@ class TaxiPassengerBaseFragment() :
overMapView?.clearCustomPolyline()
}
/**
* ① 取消订单 到达上车点后乘客取消订单 隐藏乘客验证页面
* ② 司机到达上车点 到达上车点 展示乘客验证页面
* ③ 乘客到达上车点 手机号验证成功后 隐藏乘客验证页面
* ④ debug 使用
*/
fun showOrHidePressengerCheckPager(
isShow: Boolean,
) {
try {
if (isShow) {
exitFullVideoScreen(false)
if (mArrivedCheckView == null || mArrivedCheckView!!.get() == null) {
mArrivedCheckView = WeakReference(TaxiPassengerCheckView(context))
}
OverlayViewUtils.showOverlayView(activity, mArrivedCheckView!!.get())
} else {
if (mArrivedCheckView == null || mArrivedCheckView!!.get() == null) {
return
}
OverlayViewUtils.dismissOverlayView(mArrivedCheckView!!.get())
}
} catch (e: Exception) {
e.printStackTrace()
}
}
fun showOverMapView() {
bottom.setCheckIndex(BottomBar.SelectView.OVERMAPVIEW)
}

View File

@@ -5,20 +5,18 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.common.module.utils.FrameAnimatorContainer
import com.mogo.och.common.module.utils.RxUtils
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout
import com.shuyu.gsyvideoplayer.GSYVideoManager
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
import io.reactivex.disposables.Disposable
import kotlinx.android.synthetic.main.taxt_u_p_arrived_end_panel.view.aciv_bg
import kotlinx.android.synthetic.main.taxt_u_p_arrived_end_panel.view.aciv_close
import kotlinx.android.synthetic.main.taxt_u_p_arrived_end_panel.view.actv_endstation
import kotlinx.android.synthetic.main.taxt_u_p_arrived_end_panel.view.svp_frame
import kotlinx.android.synthetic.main.taxt_u_p_arrived_end_panel.view.v_video_right_rear_view
/**
@@ -40,24 +38,23 @@ class ArrivedView : WindowRelativeLayout, ArrivedViewModel.ArrivedViewCallback {
private val gsyVideoOptionBuilder = GSYVideoOptionBuilder()
private var taxiPxiaozhiLove: FrameAnimatorContainer?=null
private fun initView() {
d(SceneConstant.M_TAXI_P + TAG, "initView")
LayoutInflater.from(context).inflate(R.layout.taxt_u_p_arrived_end_panel, this, true)
svp_frame.setBackgroundResource(R.drawable.tail_ani_0000)
svp_frame.setIsTouchWiget(false)
svp_frame.setIsTouchWigetFull(false)
svp_frame.enableshowProgressDialog = false
svp_frame.enableDoubleClick = false
GSYVideoManager.instance().enableRawPlay(AbsMogoApplication.getApp())
val url = "android.resource://" + context.packageName + "/" + R.raw.end_video
gsyVideoOptionBuilder.setUrl(url)
.setCacheWithPlay(false)
.setPlayTag("TaxiPassengerArrivedView")
.build(svp_frame)
aciv_close.onClick {
visibility = View.GONE
}
taxiPxiaozhiLove = FrameAnimatorContainer(R.array.arrived_dest, 18,aciv_bg)
taxiPxiaozhiLove?.setOnAnimStopListener(object : FrameAnimatorContainer.OnAnimationStoppedListener{
override fun AnimationStopped() {
d(SceneConstant.M_TAXI_P + TAG, "动画暂停")
}
})
}
override fun onVisibilityAggregated(isVisible: Boolean) {
@@ -65,12 +62,10 @@ class ArrivedView : WindowRelativeLayout, ArrivedViewModel.ArrivedViewCallback {
d(SceneConstant.M_TAXI_P + TAG, "展示---:${isVisible}")
if(isVisible){
v_video_right_rear_view.resetView()
taxiPxiaozhiLove?.reStart()
}else{
svp_frame.setBackgroundResource(R.drawable.tail_ani_0000)
svp_frame.setVideoAllCallBack(null)
svp_frame.onVideoReset()
svp_frame.release()
v_video_right_rear_view.resetView()
taxiPxiaozhiLove?.stop()
RxUtils.disposeSubscribe(subscribe)
}
}
@@ -89,12 +84,6 @@ class ArrivedView : WindowRelativeLayout, ArrivedViewModel.ArrivedViewCallback {
* 设置目的地重置星星状态
*/
fun setDataAndStartAnimation() {
svp_frame.setVideoAllCallBack(object : GSYSampleCallBack() {
override fun onAutoComplete(url: String?, vararg objects: Any?) {
svp_frame.setBackgroundResource(R.drawable.tail_ani_0090)
}
})
svp_frame.startPlayLogic()
subscribe = RxUtils.createSubscribe(60_000) {
visibility = View.GONE
}

View File

@@ -0,0 +1,110 @@
package com.mogo.och.taxi.passenger.ui.checkstartautopilot
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.common.module.utils.BigFrameAnimatorContainer
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout
import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.aciv_check_autopilot
import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.checkPhoneNumber
import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.startAutopilotClose
import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.startAutopilotView
/**
* V2X预警事件view通过FloatWindow呈现无需加入到自定义layout中
*
* Created on 2022/3/16
*/
class ChekAndStartAutopilotView : WindowRelativeLayout,
ChekAndStartAutopilotViewModel.CheckCallback {
constructor(context: Context?) : super(context)
constructor(context: Context?, attributeSet: AttributeSet) : super(context, attributeSet)
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int) : super(
context,
attributeSet,
defStyleAttr
)
constructor(
context: Context?,
attributeSet: AttributeSet,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attributeSet, defStyleAttr, defStyleRes)
private var viewModel: ChekAndStartAutopilotViewModel? = null
private var aniCheck2StartAutopilotView: BigFrameAnimatorContainer? = null
private fun initView(context: Context) {
d(SceneConstant.M_TAXI_P + TAG, "initView")
LayoutInflater.from(context).inflate(R.layout.taxt_u_p_check_startautopilot, this, true)
aniCheck2StartAutopilotView =
BigFrameAnimatorContainer(R.array.check2startautopilt, 32, aciv_check_autopilot, false)
startAutopilotClose.onClick {
visibility = View.GONE
}
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
if (isVisible) {
//aniCheck2StartAutopilotView?.start()
} else {
//aniCheck2StartAutopilotView?.stop()
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
viewModel = findViewTreeViewModelStoreOwner()?.let {
ViewModelProvider(it).get(ChekAndStartAutopilotViewModel::class.java)
}
viewModel?.setStartAutopilotCallback(this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
}
companion object {
const val TAG = "TaxiPassengerCheckView"
}
init {
try {
initView(context)
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun dismissWindow() {
visibility = View.GONE
}
fun resetCheckView() {
checkPhoneNumber.visibility = View.VISIBLE
startAutopilotView.visibility = View.GONE
startAutopilotClose.visibility = View.GONE
}
fun startAnimation2StartAutopilit() {
checkPhoneNumber.visibility = View.GONE
startAutopilotView.visibility = View.VISIBLE
startAutopilotClose.visibility = View.VISIBLE
}
}

View File

@@ -0,0 +1,48 @@
package com.mogo.och.taxi.passenger.ui.checkstartautopilot
import androidx.lifecycle.ViewModel
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel
class ChekAndStartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback {
private val TAG = ChekAndStartAutopilotViewModel::class.java.simpleName
private var viewCallback: CheckCallback? = null
init {
TaxiPassengerModel.setOrderStatusCallback(TAG,this)
}
fun setStartAutopilotCallback(viewCallback: CheckCallback) {
this.viewCallback = viewCallback
}
override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrdersInServiceQueryRespBean.OrderBean?) {
super.onCurrentOrderStatusChanged(order)
when (order?.orderStatus) {
TaxiPassengerOrderStatusEnum.ArriveAtStart.code -> {
// 显示手机号验证
}
TaxiPassengerOrderStatusEnum.UserArriveAtStart.code -> {
// 显示启动自驾
}
else -> {
viewCallback?.dismissWindow()
}
}
}
override fun onCleared() {
super.onCleared()
this.viewCallback = null
TaxiPassengerModel.setOrderStatusCallback(TAG, null)
}
interface CheckCallback {
fun dismissWindow()
}
}

View File

@@ -0,0 +1,106 @@
package com.mogo.och.taxi.passenger.ui.checkstartautopilot.check
import android.content.Context
import android.graphics.Typeface
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.style.TextAppearanceSpan
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.common.module.utils.RxUtils
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.widget.NumberCheckView
import io.reactivex.disposables.Disposable
import kotlinx.android.synthetic.main.taxt_u_p_check.view.numberCheckView
import kotlinx.android.synthetic.main.taxt_u_p_check.view.tv_passenger_count
import kotlinx.android.synthetic.main.taxt_u_p_check.view.tv_passenger_end
import kotlinx.android.synthetic.main.taxt_u_p_check.view.tv_passenger_start
/**
* V2X预警事件view通过FloatWindow呈现无需加入到自定义layout中
*
* Created on 2022/3/16
*/
class CheckView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(
context, attrs, defStyleAttr
), ChekViewModel.CheckCallback, NumberCheckView.SubmitListener {
private var submitThrottle: Disposable? = null
private var viewModel: ChekViewModel? = null
companion object {
const val TAG = "CheckView"
}
private fun initView(context: Context) {
d(SceneConstant.M_TAXI_P + TAG, "initView")
LayoutInflater.from(context).inflate(R.layout.taxt_u_p_check, this, true)
numberCheckView.submitListener = this
}
override fun onVisibilityAggregated(isVisible: Boolean) {
super.onVisibilityAggregated(isVisible)
if (isVisible) {
viewModel?.setOrderInfo()
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
viewModel = findViewTreeViewModelStoreOwner()?.let {
ViewModelProvider(it).get(ChekViewModel::class.java)
}
viewModel?.setStartAutopilotCallback(this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
}
init {
try {
initView(context)
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun setOrderInfo(
startSiteAddr: String?,
endSiteAddr: String?,
passengerNum: String?,
phone: String?
) {
val sb = SpannableStringBuilder("乘客数:$passengerNum") // 包装字体内容
sb.setSpan(
TextAppearanceSpan(
"default",
Typeface.NORMAL, 100,
ContextCompat.getColorStateList(context, R.color.taxi_p_378EFB), null
),
4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE
)
tv_passenger_count.text = sb
tv_passenger_start.text = "起 点 : $startSiteAddr"
tv_passenger_end.text = "终 点 : $endSiteAddr"
numberCheckView.resetNum(phone ?: "")
}
override fun trySubmit(number: String) {
RxUtils.disposeSubscribe(submitThrottle)
submitThrottle = RxUtils.createSubscribe(1_000) {
viewModel?.checkAndUpdateStatus(number)
}
}
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.taxi.passenger.ui.check
package com.mogo.och.taxi.passenger.ui.checkstartautopilot.check
import androidx.lifecycle.ViewModel
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean
@@ -6,25 +6,23 @@ import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel
class ChekViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback {
class ChekViewModel : ViewModel() {
private val TAG = ChekViewModel::class.java.simpleName
private var viewCallback: CheckCallback? = null
init {
TaxiPassengerModel.setOrderStatusCallback(TAG,this)
}
fun setStartAutopilotCallback(viewCallback: CheckCallback) {
this.viewCallback = viewCallback
setOrderInfo()
}
fun checkAndUpdateStatus(phone: String) {
TaxiPassengerModel.checkPhoneAndUpdateStatus(phone)
}
private fun setOrderInfo() {
fun setOrderInfo() {
val currentOCHOrder = TaxiPassengerModel.currentOCHOrder
currentOCHOrder?.let { order ->
viewCallback?.setOrderInfo(order.orderStartSite?.siteName,
@@ -32,17 +30,9 @@ class ChekViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback {
}
}
override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrdersInServiceQueryRespBean.OrderBean?) {
super.onCurrentOrderStatusChanged(order)
if(order == null || order.orderStatus != TaxiPassengerOrderStatusEnum.UserArriveAtStart.code) {
this.viewCallback?.dismissWindow()
}
}
override fun onCleared() {
super.onCleared()
this.viewCallback = null
TaxiPassengerModel.setOrderStatusCallback(TAG, null)
}
interface CheckCallback {
@@ -50,8 +40,6 @@ class ChekViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback {
endSiteAddr: String?,
passengerNum: String?,
phone: String?)
fun dismissWindow()
}
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.taxi.passenger.ui.startautopilot
package com.mogo.och.taxi.passenger.ui.checkstartautopilot.startautopilot
import android.content.Context
import android.util.AttributeSet
@@ -6,11 +6,9 @@ import android.view.LayoutInflater
import android.view.View
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import com.mogo.eagle.core.data.config.HdMapBuildConfig
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.OverlayViewUtils
import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition
import com.mogo.och.common.module.manager.devicemanage.data.DoorState
import com.mogo.och.common.module.utils.FrameAnimatorContainer
@@ -21,12 +19,9 @@ import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.actv_fr
import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.actv_orderinfo
import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.actv_rear_left_door
import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.actv_rear_right_door
import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.iv_xiaozhi_belt
import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.starting_autopilot_view_close
import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.taxi_p_autopilot_btn_bg
import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.taxi_p_autopilot_starting
import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.taxi_p_start_autopilot
import kotlinx.android.synthetic.main.taxt_u_p_start_autopilot_view.view.cl_car_type
/**
* @author: yangyakun
@@ -44,25 +39,15 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
context,
attributeSet,
defStyleAttr
context, attributeSet, defStyleAttr
)
constructor(
context: Context,
attributeSet: AttributeSet,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attributeSet, defStyleAttr, defStyleRes)
companion object {
private val TAG = StartAutopilotView::class.java.simpleName
}
private var taxiPStartAutopilot: FrameAnimatorContainer? = null
private var taxiPStartAutopilotCar: FrameAnimatorContainer? = null
private var taxiPXiaozhiBelt: FrameAnimatorContainer? = null
init {
@@ -72,9 +57,7 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu
private fun initView() {
LayoutInflater.from(context).inflate(R.layout.taxt_u_p_start_autopilot_view, this, true)
taxiPStartAutopilotCar = FrameAnimatorContainer(
R.array.taxi_p_start_autopilot_car,
20,
taxi_p_autopilot_starting
R.array.taxi_p_start_autopilot_car, 20, taxi_p_autopilot_starting
)
taxiPStartAutopilotCar?.setOnAnimStopListener(object :
FrameAnimatorContainer.OnAnimationStoppedListener {
@@ -83,10 +66,7 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu
}
})
taxiPStartAutopilot = FrameAnimatorContainer(
R.array.taxi_p_start_autopilot,
15,
taxi_p_autopilot_btn_bg,
false
R.array.taxi_p_start_autopilot, 15, taxi_p_autopilot_btn_bg, true
)
taxiPStartAutopilot?.setOnAnimStopListener(object :
FrameAnimatorContainer.OnAnimationStoppedListener {
@@ -94,13 +74,6 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "可以启动自驾动画暂停")
}
})
taxiPXiaozhiBelt = FrameAnimatorContainer(R.array.xiaozhi_belt, 20, iv_xiaozhi_belt)
taxiPXiaozhiBelt?.setOnAnimStopListener(object :
FrameAnimatorContainer.OnAnimationStoppedListener {
override fun AnimationStopped() {
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "小智动画暂停")
}
})
}
override fun setOrderInfo(show: String) {
@@ -155,18 +128,6 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu
}
}
override fun onVisibilityChanged(changedView: View, visibility: Int) {
super.onVisibilityChanged(changedView, visibility)
if (changedView != this) {
return
}
if (HdMapBuildConfig.currentCarVrIconRes == R.raw.hq_h9) {
cl_car_type.setBackgroundResource(R.drawable.taxt_u_p_start_panel__hq_bg)
} else {
cl_car_type.setBackgroundResource(R.drawable.taxt_u_p_start_panel__df_bg)
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "onAttachedToWindow")
@@ -177,11 +138,6 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu
startAutopiloting()
viewModel.startAutopilot()
}
starting_autopilot_view_close.onClick {
unableStartAutopilot()
OverlayViewUtils.dismissOverlayView(this)
}
taxiPXiaozhiBelt?.start()
}
/**
@@ -235,7 +191,7 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu
ableStartAutopilot()
}
private fun goneAllDoorState(){
private fun goneAllDoorState() {
actv_front_left_door.visibility = GONE
actv_front_right_door.visibility = GONE
actv_rear_left_door.visibility = GONE
@@ -245,7 +201,6 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu
override fun onDetachedFromWindow() {
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "onDetachedFromWindow")
unableStartAutopilot()
taxiPXiaozhiBelt?.stop()
goneAllDoorState()
super.onDetachedFromWindow()
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.taxi.passenger.ui.startautopilot
package com.mogo.och.taxi.passenger.ui.checkstartautopilot.startautopilot
import androidx.lifecycle.ViewModel
import com.mogo.commons.voice.AIAssist

View File

@@ -54,10 +54,10 @@ class DebugView @JvmOverloads constructor(
fragment?.showOrHideArrivedEndLayout(true)
}
tv_show_phone_check.onClick {
fragment?.showOrHidePressengerCheckPager(isShow = true)
fragment?.showOrHideCheckAndStartAutopilotView(0)
}
tv_show_start_autopilot.onClick {
fragment?.showOrHideStartAutopilotView(true)
fragment?.showOrHideCheckAndStartAutopilotView(1)
}
tv_show_order_info.onClick {
fragment?.showOrHideServingOrderFragment(true)

View File

@@ -1,88 +1,79 @@
package com.mogo.och.taxi.passenger.ui.check
package com.mogo.och.taxi.passenger.widget
import android.content.Context
import android.graphics.Typeface
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.style.TextAppearanceSpan
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider
import com.mogo.commons.voice.AIAssist
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.OverlayViewUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.utils.FrameAnimatorContainer
import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.ui.arrived.ArrivedView
import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.iv_zhi_normal
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_passenger_count
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_passenger_end
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_passenger_start
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_back
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_eight
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_first
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_five
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_four
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_fourth
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_nine
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_one
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_second
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_seven
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_six
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_submit
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_third
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_three
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_two
import kotlinx.android.synthetic.main.taxt_u_p_passenger_check_panel.view.tv_taxi_passenger_number_zero
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_back
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_eight
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_first
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_five
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_four
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_fourth
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_nine
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_one
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_second
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_seven
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_six
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_submit
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_third
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_three
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_two
import kotlinx.android.synthetic.main.taxt_u_p_check_number.view.tv_taxi_passenger_number_zero
/**
* V2X预警事件view通过FloatWindow呈现无需加入到自定义layout中
*
* Created on 2022/3/16
*/
class TaxiPassengerCheckView : WindowRelativeLayout, View.OnClickListener,
ChekViewModel.CheckCallback {
constructor(context: Context?) : super(context)
constructor(context: Context?, attributeSet: AttributeSet) : super(context, attributeSet)
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
class NumberCheckView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr), View.OnClickListener {
private var index = 0
private var phone = ""
private val numSelect = arrayOfNulls<Int>(4)
private val numSelectTextView = arrayOfNulls<TextView>(4)
private lateinit var viewModel:ChekViewModel
private var taxiPxiaozhiCheck: FrameAnimatorContainer?=null
var submitListener: SubmitListener? = null
companion object {
const val TAG = "NumberCheckView"
}
init {
try {
initView(context)
} catch (e: Exception) {
e.printStackTrace()
}
}
fun resetNum(phone:String){
this.phone = phone
for(i in numSelect.indices){
numSelect[i] = null
}
numSelectTextView.forEach {
it?.text = ""
}
}
private fun initView(context: Context) {
d(SceneConstant.M_TAXI_P + TAG, "initView")
LayoutInflater.from(context).inflate(R.layout.taxt_u_p_passenger_check_panel, this, true)
LayoutInflater.from(context).inflate(R.layout.taxt_u_p_check_number, this, true)
keyBoardLogic()
numSelectTextView[0] = tv_taxi_passenger_number_first
numSelectTextView[1] = tv_taxi_passenger_number_second
numSelectTextView[2] = tv_taxi_passenger_number_third
numSelectTextView[3] = tv_taxi_passenger_number_fourth
taxiPxiaozhiCheck = FrameAnimatorContainer(R.array.xiaozhi_normal, 12,iv_zhi_normal)
taxiPxiaozhiCheck?.setOnAnimStopListener(object : FrameAnimatorContainer.OnAnimationStoppedListener{
override fun AnimationStopped() {
CallerLogger.d(SceneConstant.M_TAXI_P + ArrivedView.TAG, "动画暂停")
}
})
}
private fun keyBoardLogic() {
@@ -135,19 +126,7 @@ class TaxiPassengerCheckView : WindowRelativeLayout, View.OnClickListener,
VoiceNotice.showNotice("验证失败!再检查一下吧~", AIAssist.LEVEL2)
return
}
viewModel.checkAndUpdateStatus(numberStr)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
viewModel = ViewModelProvider(this).get(ChekViewModel::class.java)
viewModel.setStartAutopilotCallback(this)
taxiPxiaozhiCheck?.start()
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
taxiPxiaozhiCheck?.stop()
submitListener?.trySubmit(numberStr)
}
private fun selectIndex(i: Int) {
@@ -235,41 +214,9 @@ class TaxiPassengerCheckView : WindowRelativeLayout, View.OnClickListener,
)
}
}
}
companion object {
const val TAG = "TaxiPassengerCheckView"
}
init {
try {
initView(context)
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun setOrderInfo(startSiteAddr: String?, endSiteAddr: String?, passengerNum: String?, phone: String?) {
this.phone = phone?:""
val sb = SpannableStringBuilder("乘客数:$passengerNum") // 包装字体内容
sb.setSpan(
TextAppearanceSpan("default",
Typeface.NORMAL,100,
ContextCompat.getColorStateList(context,R.color.taxi_p_check_passenger_number) ,null ),
4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
tv_passenger_count.text = sb
tv_passenger_start.text = "起 点 : $startSiteAddr"
tv_passenger_end.text = "终 点 : $endSiteAddr"
for(i in numSelect.indices){
numSelect[i] = null
}
numSelectTextView.forEach {
it?.text = ""
}
}
override fun dismissWindow() {
OverlayViewUtils.dismissOverlayView(this)
interface SubmitListener {
fun trySubmit(number: String)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 847 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 981 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 836 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 881 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 976 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 893 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1004 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 986 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 984 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 670 KiB

After

Width:  |  Height:  |  Size: 139 KiB

View File

@@ -7,8 +7,8 @@
android:layout_height="match_parent"
tools:ignore="MissingDefaultResource">
<com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer
android:id="@+id/svp_frame"
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"

View File

@@ -148,25 +148,24 @@
android:layout_height="@dimen/dp_160"
app:layout_constraintBottom_toBottomOf="parent" />
<com.mogo.och.taxi.passenger.ui.debug.DebugView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_120"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.och.taxi.passenger.ui.arrived.ArrivedView
android:id="@+id/arrivedView"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.mogo.och.taxi.passenger.ui.checkstartautopilot.ChekAndStartAutopilotView
android:id="@+id/chekAndStartAutopilotView"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.mogo.och.common.module.wigets.ZhiView
android:id="@+id/aciv_xiaozhi_normal"
android:layout_width="@dimen/dp_360"
android:layout_height="@dimen/dp_360"
android:layout_marginBottom="@dimen/dp_m_30"
android:layout_marginEnd="@dimen/dp_60"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
@@ -179,4 +178,12 @@
android:layout_marginBottom="-80dp"
app:layout_constraintEnd_toEndOf="parent" />
<com.mogo.och.taxi.passenger.ui.debug.DebugView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<merge 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
tools:ignore="MissingDefaultResource">
<TextView
android:id="@+id/tv_hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_170"
android:layout_marginTop="@dimen/dp_442"
android:text="@string/taxi_p_check_hello_text"
android:textColor="@color/taxi_p_191E3C"
android:textSize="@dimen/dp_151"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_welcome_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="@string/taxi_p_check_hello_small_text"
android:textColor="@color/taxi_p_191E3C"
android:textSize="@dimen/dp_58"
app:layout_constraintStart_toStartOf="@+id/tv_hello"
app:layout_constraintTop_toBottomOf="@+id/tv_hello" />
<TextView
android:id="@+id/tv_passenger_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="-20dp"
android:layout_marginBottom="@dimen/dp_61"
android:paddingStart="@dimen/dp_20"
android:paddingTop="@dimen/dp_20"
android:paddingEnd="@dimen/dp_20"
android:paddingBottom="@dimen/dp_20"
android:shadowRadius="20"
android:textColor="@color/taxi_p_191E3C"
android:textSize="@dimen/dp_55"
app:layout_constraintBottom_toTopOf="@+id/tv_passenger_start"
app:layout_constraintStart_toStartOf="@+id/iv_passenger_start_boll"
android:text="乘客数2位" />
<TextView
android:id="@+id/tv_passenger_start"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_44"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/taxi_p_464646"
android:textSize="@dimen/dp_46"
app:layout_constraintBottom_toBottomOf="@+id/iv_passenger_start_boll"
app:layout_constraintEnd_toStartOf="@+id/numberCheckView"
app:layout_constraintStart_toStartOf="@+id/iv_passenger_start_boll"
app:layout_constraintTop_toTopOf="@+id/iv_passenger_start_boll"
android:text="起 点 : 衡山科学城" />
<ImageView
android:id="@+id/iv_passenger_start_boll"
android:layout_width="@dimen/dp_17"
android:layout_height="@dimen/dp_17"
android:src="@drawable/taxt_u_p_check_start_boll"
app:layout_constraintBottom_toTopOf="@+id/iv_passenger_start_end_line"
app:layout_constraintEnd_toEndOf="@+id/iv_passenger_start_end_line"
app:layout_constraintStart_toStartOf="@+id/iv_passenger_start_end_line" />
<ImageView
android:id="@+id/iv_passenger_start_end_line"
android:layout_width="@dimen/dp_1"
android:layout_height="@dimen/dp_78"
android:src="@drawable/taxt_u_p_check_start_end_line"
app:layout_constraintBottom_toTopOf="@+id/iv_passenger_end_boll"
app:layout_constraintEnd_toEndOf="@+id/iv_passenger_end_boll"
app:layout_constraintStart_toStartOf="@+id/iv_passenger_end_boll" />
<ImageView
android:id="@+id/iv_passenger_end_boll"
android:layout_width="@dimen/dp_17"
android:layout_height="@dimen/dp_17"
android:layout_marginStart="@dimen/dp_170"
android:layout_marginBottom="@dimen/dp_148"
android:src="@drawable/taxt_u_p_check_end_boll"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_passenger_end"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_44"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/taxi_p_464646"
android:textSize="@dimen/dp_46"
app:layout_constraintBottom_toBottomOf="@+id/iv_passenger_end_boll"
app:layout_constraintEnd_toStartOf="@+id/numberCheckView"
app:layout_constraintStart_toStartOf="@+id/iv_passenger_end_boll"
app:layout_constraintTop_toTopOf="@+id/iv_passenger_end_boll"
android:text="终 点 : 石鼓收费站" />
<com.mogo.och.taxi.passenger.widget.NumberCheckView
android:id="@+id/numberCheckView"
android:layout_width="1103dp"
android:layout_height="1131dp"
android:layout_marginEnd="@dimen/dp_142"
android:layout_marginBottom="@dimen/dp_166"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</merge>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:layout_width="1103dp"
android:layout_height="1131dp"
android:background="@drawable/taxt_u_p_check_input_bg"
tools:ignore="MissingDefaultResource">
<TextView
android:id="@+id/tv_taxi_passenger_number_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_181"
android:text="@string/taxi_p_check_input_phone_tail_title"
android:textColor="@color/taxi_p_check_keyboard_samll_mogo_color"
android:textSize="@dimen/dp_46"
app:layout_constraintStart_toStartOf="@+id/tv_taxi_passenger_number_first"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_taxi_passenger_number_first"
style="@style/och_check_number_checked"
android:layout_width="@dimen/dp_173"
android:layout_height="@dimen/dp_173"
android:layout_marginTop="@dimen/dp_58"
android:layout_marginEnd="@dimen/dp_44"
android:backgroundTintMode="screen"
android:gravity="center"
android:textSize="@dimen/dp_76"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_second"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_taxi_passenger_number_title" />
<TextView
android:id="@+id/tv_taxi_passenger_number_second"
style="@style/och_check_number"
android:layout_marginEnd="@dimen/dp_44"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_third"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_first"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_first" />
<TextView
android:id="@+id/tv_taxi_passenger_number_third"
style="@style/och_check_number"
android:layout_marginEnd="@dimen/dp_44"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_fourth"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_second"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_second" />
<TextView
android:id="@+id/tv_taxi_passenger_number_fourth"
style="@style/och_check_number"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_third"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_third" />
<TextView
android:id="@+id/tv_taxi_passenger_number_back"
style="@style/och_check_number_keyboard"
android:layout_marginEnd="@dimen/dp_45"
android:layout_marginBottom="@dimen/dp_181"
android:text="@string/tv_delete"
android:textSize="@dimen/dp_36"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_zero"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_taxi_passenger_number_zero"
style="@style/och_check_number_keyboard"
android:layout_marginEnd="@dimen/dp_45"
android:text="0"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_submit"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_back"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_back" />
<TextView
android:id="@+id/tv_taxi_passenger_number_submit"
style="@style/och_check_number_keyboard"
android:text="清空"
android:textSize="@dimen/dp_36"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_zero"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_back" />
<TextView
android:id="@+id/tv_taxi_passenger_number_seven"
style="@style/och_check_number_keyboard"
android:layout_marginEnd="@dimen/dp_45"
android:layout_marginBottom="24dp"
android:text="7"
app:layout_constraintBottom_toTopOf="@id/tv_taxi_passenger_number_back"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_eight"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_taxi_passenger_number_eight"
style="@style/och_check_number_keyboard"
android:layout_marginEnd="@dimen/dp_45"
android:text="8"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_nine"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_seven"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_seven" />
<TextView
android:id="@+id/tv_taxi_passenger_number_nine"
style="@style/och_check_number_keyboard"
android:text="9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_eight"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_seven" />
<TextView
android:id="@+id/tv_taxi_passenger_number_four"
style="@style/och_check_number_keyboard"
android:layout_marginEnd="@dimen/dp_45"
android:layout_marginBottom="24dp"
android:text="4"
app:layout_constraintBottom_toTopOf="@id/tv_taxi_passenger_number_seven"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_five"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_taxi_passenger_number_five"
style="@style/och_check_number_keyboard"
android:layout_marginEnd="@dimen/dp_45"
android:text="5"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_six"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_four"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_four" />
<TextView
android:id="@+id/tv_taxi_passenger_number_six"
style="@style/och_check_number_keyboard"
android:text="6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_five"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_four" />
<TextView
android:id="@+id/tv_taxi_passenger_number_one"
style="@style/och_check_number_keyboard"
android:layout_marginEnd="@dimen/dp_45"
android:layout_marginBottom="24dp"
android:text="1"
app:layout_constraintBottom_toTopOf="@id/tv_taxi_passenger_number_four"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_two"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_taxi_passenger_number_two"
style="@style/och_check_number_keyboard"
android:layout_marginEnd="@dimen/dp_45"
android:text="2"
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_three"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_one"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_one" />
<TextView
android:id="@+id/tv_taxi_passenger_number_three"
style="@style/och_check_number_keyboard"
android:text="3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_two"
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_one" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:id="@+id/cl_contain"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MissingDefaultResource">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_check_autopilot"
android:src="@drawable/check2startautopilt_000"
android:scaleType="fitXY"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.mogo.och.taxi.passenger.ui.checkstartautopilot.check.CheckView
android:id="@+id/checkPhoneNumber"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.mogo.och.taxi.passenger.ui.checkstartautopilot.startautopilot.StartAutopilotView
android:id="@+id/startAutopilotView"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ImageView
android:id="@+id/startAutopilotClose"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:src="@drawable/taxt_u_p_arrived_close"
android:visibility="gone"
android:layout_marginEnd="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_50"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -5,7 +5,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/cl_car_type"
android:background="@drawable/taxt_u_p_start_panel__df_bg"
tools:ignore="MissingDefaultResource">
<ImageView
@@ -20,16 +19,6 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<ImageView
android:id="@+id/starting_autopilot_view_close"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:src="@drawable/taxt_u_p_arrived_close"
android:layout_marginEnd="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_50"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"/>
<ImageView
android:id="@+id/taxi_p_autopilot_btn_bg"
android:layout_width="1000dp"
@@ -71,85 +60,11 @@
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginBottom="@dimen/dp_59"
tools:text="用户1234882382 目的地:环球贸易中心"
android:textColor="@android:color/white"
android:textColor="@color/taxi_p_333333"
android:textSize="@dimen/dp_44"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<View
android:id="@+id/v_xiaozhi_belt_info_bg"
app:layout_constraintBottom_toTopOf="@+id/iv_xiaozhi_belt"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/dp_50"
android:background="@drawable/taxt_u_p_xiaozhibelt_info"
android:layout_marginBottom="@dimen/dp_20"
android:layout_width="@dimen/dp_600"
android:layout_height="@dimen/dp_339"/>
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintStart_toStartOf="@+id/v_xiaozhi_belt_info_bg"
app:layout_constraintEnd_toEndOf="@+id/v_xiaozhi_belt_info_bg"
app:layout_constraintTop_toTopOf="@+id/v_xiaozhi_belt_info_bg"
android:layout_marginTop="@dimen/dp_52"
android:text="一切准备就绪,再开启行程吧!"
android:textSize="@dimen/dp_38"
android:textColor="@android:color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<View
android:id="@+id/v_xiaozhi_belt_ball_01"
app:layout_constraintTop_toTopOf="@+id/v_xiaozhi_belt_info_bg"
app:layout_constraintStart_toStartOf="@+id/v_xiaozhi_belt_info_bg"
android:layout_marginTop="@dimen/dp_165"
android:layout_marginStart="@dimen/dp_81"
android:background="@drawable/taxt_u_p_xiaozhibelt_info_ball"
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"/>
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toTopOf="@+id/v_xiaozhi_belt_ball_01"
app:layout_constraintBottom_toBottomOf="@+id/v_xiaozhi_belt_ball_01"
app:layout_constraintStart_toEndOf="@+id/v_xiaozhi_belt_ball_01"
android:layout_marginStart="@dimen/dp_15"
android:text="关闭车门"
android:textColor="@color/taxi_p_80F8FF"
android:textSize="@dimen/dp_44"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<View
android:id="@+id/v_xiaozhi_belt_ball_02"
app:layout_constraintTop_toTopOf="@+id/v_xiaozhi_belt_info_bg"
app:layout_constraintStart_toStartOf="@+id/v_xiaozhi_belt_info_bg"
android:layout_marginTop="@dimen/dp_243"
android:layout_marginStart="@dimen/dp_81"
android:background="@drawable/taxt_u_p_xiaozhibelt_info_ball"
android:layout_width="@dimen/dp_16"
android:layout_height="@dimen/dp_16"/>
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toTopOf="@+id/v_xiaozhi_belt_ball_02"
app:layout_constraintBottom_toBottomOf="@+id/v_xiaozhi_belt_ball_02"
app:layout_constraintStart_toEndOf="@+id/v_xiaozhi_belt_ball_01"
android:layout_marginStart="@dimen/dp_15"
android:text="佩戴安全带"
android:textColor="@color/taxi_p_80F8FF"
android:textSize="@dimen/dp_44"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv_xiaozhi_belt"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:src="@drawable/xiaozhi_belt_000"
android:layout_width="@dimen/dp_360"
android:layout_height="@dimen/dp_360"
android:layout_marginBottom="@dimen/dp_m_30"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gl_vertical_center"
android:orientation="vertical"

View File

@@ -225,4 +225,100 @@
<item>@drawable/xiaozhi_belt_048</item>
</string-array>
<string-array name="arrived_dest">
<item>@drawable/check2startautopilt_000</item>
<item>@drawable/check2startautopilt_001</item>
<item>@drawable/check2startautopilt_002</item>
<item>@drawable/check2startautopilt_003</item>
<item>@drawable/check2startautopilt_004</item>
<item>@drawable/check2startautopilt_005</item>
<item>@drawable/check2startautopilt_006</item>
<item>@drawable/check2startautopilt_007</item>
<item>@drawable/check2startautopilt_008</item>
<item>@drawable/check2startautopilt_009</item>
<item>@drawable/check2startautopilt_010</item>
<item>@drawable/check2startautopilt_011</item>
<item>@drawable/check2startautopilt_012</item>
<item>@drawable/check2startautopilt_013</item>
<item>@drawable/check2startautopilt_014</item>
<item>@drawable/check2startautopilt_015</item>
<item>@drawable/check2startautopilt_016</item>
<item>@drawable/check2startautopilt_017</item>
<item>@drawable/check2startautopilt_018</item>
</string-array>
<string-array name="check2startautopilt">
<item>@drawable/check2startautopilt_000</item>
<item>@drawable/check2startautopilt_001</item>
<item>@drawable/check2startautopilt_002</item>
<item>@drawable/check2startautopilt_003</item>
<item>@drawable/check2startautopilt_004</item>
<item>@drawable/check2startautopilt_005</item>
<item>@drawable/check2startautopilt_006</item>
<item>@drawable/check2startautopilt_007</item>
<item>@drawable/check2startautopilt_008</item>
<item>@drawable/check2startautopilt_009</item>
<item>@drawable/check2startautopilt_010</item>
<item>@drawable/check2startautopilt_011</item>
<item>@drawable/check2startautopilt_012</item>
<item>@drawable/check2startautopilt_013</item>
<item>@drawable/check2startautopilt_014</item>
<item>@drawable/check2startautopilt_015</item>
<item>@drawable/check2startautopilt_016</item>
<item>@drawable/check2startautopilt_017</item>
<item>@drawable/check2startautopilt_018</item>
<item>@drawable/check2startautopilt_019</item>
<item>@drawable/check2startautopilt_020</item>
<item>@drawable/check2startautopilt_021</item>
<item>@drawable/check2startautopilt_022</item>
<item>@drawable/check2startautopilt_023</item>
<item>@drawable/check2startautopilt_024</item>
<item>@drawable/check2startautopilt_025</item>
<item>@drawable/check2startautopilt_026</item>
<item>@drawable/check2startautopilt_027</item>
<item>@drawable/check2startautopilt_028</item>
<item>@drawable/check2startautopilt_029</item>
<item>@drawable/check2startautopilt_030</item>
<item>@drawable/check2startautopilt_031</item>
<item>@drawable/check2startautopilt_032</item>
<item>@drawable/check2startautopilt_033</item>
<item>@drawable/check2startautopilt_034</item>
<item>@drawable/check2startautopilt_035</item>
<item>@drawable/check2startautopilt_036</item>
<item>@drawable/check2startautopilt_037</item>
<item>@drawable/check2startautopilt_038</item>
<item>@drawable/check2startautopilt_039</item>
<item>@drawable/check2startautopilt_040</item>
<item>@drawable/check2startautopilt_041</item>
<item>@drawable/check2startautopilt_042</item>
<item>@drawable/check2startautopilt_043</item>
<item>@drawable/check2startautopilt_044</item>
<item>@drawable/check2startautopilt_045</item>
<item>@drawable/check2startautopilt_046</item>
<item>@drawable/check2startautopilt_047</item>
<item>@drawable/check2startautopilt_048</item>
<item>@drawable/check2startautopilt_050</item>
<item>@drawable/check2startautopilt_051</item>
<item>@drawable/check2startautopilt_052</item>
<item>@drawable/check2startautopilt_053</item>
<item>@drawable/check2startautopilt_054</item>
<item>@drawable/check2startautopilt_055</item>
<item>@drawable/check2startautopilt_056</item>
<item>@drawable/check2startautopilt_057</item>
<item>@drawable/check2startautopilt_058</item>
<item>@drawable/check2startautopilt_060</item>
</string-array>
</resources>

View File

@@ -45,9 +45,13 @@
<color name="taxi_p_76D7FF">#76D7FF</color>
<color name="taxi_p_255BAA">#255BAA</color>
<color name="taxi_p_80F8FF">#80F8FF</color>
<color name="taxi_p_464646">#464646</color>
<color name="taxi_p_378EFB">#378EFB</color>
<color name="taxi_p_191E3C">#191E3C</color>
<color name="taxi_p_2B364B">#2B364B</color>
<color name="taxi_p_005D6A8C">#005D6A8C</color>
<color name="taxi_p_5D6A8C">#5D6A8C</color>
<color name="taxi_p_333333">#333333</color>
<color name="taxi_p_995D6A8C">#995D6A8C</color>
<color name="taxi_p_B37E90BF">#B37E90BF</color>