[距离和时间乘客屏单独计算]
This commit is contained in:
yangyakun
2023-07-24 18:46:53 +08:00
parent 22111121d1
commit 5000a87d2e
10 changed files with 27 additions and 868 deletions

View File

@@ -20,15 +20,15 @@ class TaxiPassengerConst {
const val LOOP_PERIOD_1S = 1 * 1000L
const val LOOP_DELAY = 100L
// 订单总里程
const val SP_KEY_ORDER_SUM_DIS = "SP_KEY_ORDER_SUM_DIS"
//实时查询订单剩余时间 和 剩余里程 轮询间隔2s
const val LOOP_CALCULATEROUTE_2S = 2 * 1000L
// 开始服务启动自动驾驶等待时间(埋点上传)
const val LOOP_PERIOD_15S = 15 * 1000L
const val TAXI_AVERAGE_SPEED = 38
// 埋点key接管后点击'自动驾驶'按钮启动
const val EVENT_KEY_RESTART_AUTOPILOT = "event_key_och_taxi_restart_autopilot"
// 埋点key开始服务开启自动驾驶成功/失败)

View File

@@ -40,7 +40,6 @@ import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum.Companion.valueOf
import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager
import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager
import io.reactivex.disposables.Disposable
import java.util.concurrent.ConcurrentHashMap
/**
@@ -95,7 +94,7 @@ object TaxiPassengerModel {
*/
fun release() {
startOrStopOrderLoop(false)
startOrStopQueryOrderRemaining(false)
//startOrStopQueryOrderRemaining(false)
releaseListeners()
}
@@ -211,8 +210,18 @@ object TaxiPassengerModel {
//监听网络变化,避免启动机器时无网导致无法更新订单信息
private val distanceListener: IDistanceListener = object : IDistanceListener {
var allDistance = 0f
override fun stationDistanceCallback(stationDistance: Float) {
SharedPrefsMgr.getInstance(mContext!!).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, stationDistance.toInt())
allDistance = stationDistance
}
override fun distanceCallback(distance: Float) {
val lastTime: Double = distance / TaxiPassengerConst.TAXI_AVERAGE_SPEED * 3.6 //秒
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderDistToEndChanged(distance.toLong(),lastTime.toLong(),allDistance.toInt())
}
}
}
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent ->
@@ -241,43 +250,6 @@ object TaxiPassengerModel {
}
}
fun startOrStopQueryOrderRemaining(isStart: Boolean) {
if (isStart) {
BizLoopManager.setLoopFunction(MQUERYORDERREMAINING,LoopInfo(2, TaxiPassengerModel::queryOrderRemaining))
} else {
BizLoopManager.removeLoopFunction(MQUERYORDERREMAINING)
}
}
/**
* 查询订单剩余里程和时间
*/
private fun queryOrderRemaining() {
if (currentOCHOrder == null) return
TaxiPassengerServiceManager.queryOrderRemaining(
currentOCHOrder!!.orderNo,
object : OchCommonServiceCallback<TaxiPassengerOrderQueryRemainingResp> {
override fun onSuccess(data: TaxiPassengerOrderQueryRemainingResp) {
if (data.data != null) {
e(M_TAXI_P + TAG, "distance = " + data.data.distance + " ,duration = " + data.data.duration)
val stationDistance = SharedPrefsMgr.getInstance(mContext!!).getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0)
for (callback in mOrderStatusCallbackMap.values) {
callback.onCurrentOrderDistToEndChanged(data.data.distance, data.data.duration,stationDistance)
}
}
}
override fun onFail(code: Int, msg: String) {}
})
}
/**
* 订单结束或者取消的时候, 刷新导航标识位以及缓存的数据
*/
fun recoverNaviInfo() {
SharedPrefsMgr.getInstance(mContext!!).remove(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS)
}
fun checkPhoneAndUpdateStatus(
phoneTail: String?,
commonCallback: ITaxiPassengerCommonCallback?
@@ -328,28 +300,26 @@ object TaxiPassengerModel {
}
TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> {
CallerFuncBizManager.bizProvider.queryV2XEvents() //全览模式的V2X事件轮询开始
startOrStopQueryOrderRemaining(true)
//startOrStopQueryOrderRemaining(true)
AutopilotManager.updateAutopilotControlParameters()
startOrStopReadyToAutopilotLoop(false)
setStation()
CallerOrderListenerManager.invokeOrderStatus(true)
}
TaxiPassengerOrderStatusEnum.ArriveAtEnd -> {
recoverNaviInfo()
AutopilotManager.clearAutopilotControlParameters()
startOrStopQueryOrderRemaining(false)
//startOrStopQueryOrderRemaining(false)
CallerOrderListenerManager.invokeOrderStatus(false)
cleanStation()
}
TaxiPassengerOrderStatusEnum.JourneyCompleted -> {
AutopilotManager.clearAutopilotControlParameters()
startOrStopQueryOrderRemaining(false)
//startOrStopQueryOrderRemaining(false)
cleanStation()
}
TaxiPassengerOrderStatusEnum.Cancel -> {
recoverNaviInfo()
AutopilotManager.clearAutopilotControlParameters()
startOrStopQueryOrderRemaining(false)
//startOrStopQueryOrderRemaining(false)
startOrStopReadyToAutopilotLoop(false)
cleanStation()
}

View File

@@ -1,51 +0,0 @@
package com.mogo.och.taxi.passenger.ui;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
/**
* @author: wangmingjun
* @date: 2022/3/21
*/
public class CustomSeekBar extends AppCompatSeekBar {
private boolean touch = false; //是否支持拖动, 默认为不可以
public CustomSeekBar(@NonNull Context context) {
super(context);
}
public CustomSeekBar(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CustomSeekBar(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected synchronized void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
public void setTouch(boolean touch) {
this.touch = touch;
}
/**
* onTouchEvent 处理
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
if (touch) {
return super.onTouchEvent(event);
}
return false;
}
}

View File

@@ -1,24 +0,0 @@
package com.mogo.och.taxi.passenger.ui
import com.amap.api.maps.model.LatLng
/**
* @author xiaoyuzhou
* @date 2021/6/24 11:33 上午
*/
interface ITaxiPassengerMapDirectionView {
/**
* 绘制路径线
*/
fun drawablePolyline()
/**
* 清除路径线
*/
fun clearPolyline()
/**
* 设置路径中起终点marker
*/
fun setLineMarker(startStation: LatLng, endStation: LatLng)
}

View File

@@ -1,200 +0,0 @@
package com.mogo.och.taxi.passenger.ui
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.enums.TrafficLightEnum
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.taxi.passenger.R
import kotlinx.android.synthetic.main.taxi_p_traffic_light_view.view.*
/**
* Taxi乘客端红绿灯view
*
* Created on 2022/3/14
*/
class TaxiPassengerTrafficLightView @JvmOverloads constructor(
context: Context?,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr), IMoGoTrafficLightListener {
companion object {
private const val TAG = "TaxiPassengerTrafficLightView"
}
private var mCurrentLightId = TrafficLightEnum.BLACK
init {
init(context)
}
private fun init(context: Context?) {
LayoutInflater.from(context).inflate(R.layout.taxi_p_traffic_light_view, this, true)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerTrafficLightListenerManager.addListener(TAG, this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerTrafficLightListenerManager.removeListener(TAG)
}
/**
* 展示红绿灯预警
*
* @param checkLightId 0-都是默认1-红2-黄3-绿
* @param lightSource 1:云端下发2:自车感知
*/
override fun showTrafficLight(checkLightId: TrafficLightEnum, lightSource: DataSourceType) {
super.showTrafficLight(checkLightId, lightSource)
mCurrentLightId = checkLightId
updateTrafficLightIcon(checkLightId)
}
/**
* 关闭红绿灯预警展示,并重制灯态
*/
override fun disableTrafficLight() {
super.disableTrafficLight()
UiThreadHandler.post {
mCurrentLightId = TrafficLightEnum.BLACK
this@TaxiPassengerTrafficLightView.visibility = GONE
}
}
/**
* @param redNum 红灯倒计时
* @param yellowNum 黄灯倒计时
* @param greenNum 绿灯倒计时
*/
override fun changeCountdownTrafficLightNum(redNum: Int, yellowNum: Int, greenNum: Int) {
super.changeCountdownTrafficLightNum(redNum, yellowNum, greenNum)
resetView()
when (mCurrentLightId) {
TrafficLightEnum.RED -> changeCountdownRed(redNum)
TrafficLightEnum.YELLOW -> changeCountdownYellow(yellowNum)
TrafficLightEnum.GREEN -> changeCountdownGreen(greenNum)
else -> UiThreadHandler.post { taxi_p_traffic_light_time_tv.text = "" }
}
}
override fun changeCountdownRed(redNum: Int) {
super.changeCountdownRed(redNum)
UiThreadHandler.post {
if (redNum > 0) {
resetView()
taxi_p_traffic_light_time_tv.setVertrial(true)
taxi_p_traffic_light_time_tv.setmColorList(
intArrayOf(
resources.getColor(R.color.taxi_p_traffic_light_red_color_up),
resources.getColor(R.color.taxi_p_traffic_light_red_color_down)
)
)
taxi_p_traffic_light_time_tv.text = redNum.toString()
} else {
disableTrafficLightCountDown()
taxi_p_traffic_light_time_tv.text = ""
}
}
}
override fun changeCountdownGreen(greenNum: Int) {
super.changeCountdownGreen(greenNum)
UiThreadHandler.post {
if (greenNum > 0) {
resetView()
taxi_p_traffic_light_time_tv.setVertrial(true)
taxi_p_traffic_light_time_tv.setmColorList(
intArrayOf(
resources.getColor(R.color.taxi_p_traffic_light_green_color_up),
resources.getColor(R.color.taxi_p_traffic_light_green_color_down)
)
)
taxi_p_traffic_light_time_tv.text = greenNum.toString()
} else {
disableTrafficLightCountDown()
taxi_p_traffic_light_time_tv.text = ""
}
}
}
override fun changeCountdownYellow(yellowNum: Int) {
super.changeCountdownYellow(yellowNum)
UiThreadHandler.post {
if (yellowNum > 0) {
resetView()
taxi_p_traffic_light_time_tv.setVertrial(true)
taxi_p_traffic_light_time_tv.setmColorList(
intArrayOf(
resources.getColor(R.color.taxi_p_traffic_light_yellow_color_up),
resources.getColor(R.color.taxi_p_traffic_light_yellow_color_down)
)
)
taxi_p_traffic_light_time_tv.text = yellowNum.toString()
} else {
disableTrafficLightCountDown()
taxi_p_traffic_light_time_tv.text = ""
}
}
}
/**
* 更新红绿灯icon
*
* @param lightId 0-都是默认1-红2-黄3-绿
*/
private fun updateTrafficLightIcon(lightId: TrafficLightEnum) {
UiThreadHandler.post {
when (lightId) {
TrafficLightEnum.RED -> {
taxi_p_traffic_light_iv.setBackgroundResource(R.drawable.taxi_p_light_red_nor)
this@TaxiPassengerTrafficLightView.visibility = VISIBLE
}
TrafficLightEnum.YELLOW -> {
taxi_p_traffic_light_iv.setBackgroundResource(R.drawable.taxi_p_lightyellow_nor)
this@TaxiPassengerTrafficLightView.visibility = VISIBLE
}
TrafficLightEnum.GREEN -> {
taxi_p_traffic_light_iv.setBackgroundResource(R.drawable.taxi_p_light_green_nor)
this@TaxiPassengerTrafficLightView.visibility = VISIBLE
}
else -> this@TaxiPassengerTrafficLightView.visibility = GONE
}
}
}
override fun disableTrafficLightCountDown() {
super.disableTrafficLightCountDown()
UiThreadHandler.post {
val layoutParams = layoutParams
if (layoutParams is MarginLayoutParams) {
layoutParams.width =
resources.getDimension(R.dimen.taxi_p_traffic_light_icon_size).toInt()
setLayoutParams(layoutParams)
taxi_p_traffic_light_time_tv.visibility = GONE
taxi_p_traffic_light_bg.layoutParams.width =
resources.getDimension(R.dimen.dp_124).toInt()
}
}
}
private fun resetView() {
val layoutParams = layoutParams
if (layoutParams is MarginLayoutParams) {
val lp = layoutParams
lp.width = resources.getDimension(R.dimen.taxi_p_traffic_light_layout_width).toInt()
setLayoutParams(lp)
taxi_p_traffic_light_time_tv.visibility = VISIBLE
taxi_p_traffic_light_bg.layoutParams.width =
resources.getDimension(R.dimen.taxi_p_traffic_light_bg_width).toInt()
}
}
}

View File

@@ -1,93 +0,0 @@
package com.mogo.och.taxi.passenger.ui;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.TextView;
import com.mogo.eagle.core.data.enums.SidePattern;
import com.mogo.eagle.core.function.api.hmi.view.IViewNotification;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.taxi.passenger.R;
import org.jetbrains.annotations.Nullable;
/**
* V2X预警事件view通过FloatWindow呈现无需加入到自定义layout中
*
* Created on 2022/3/16
*/
public class TaxiPassengerV2XNotificationView extends IViewNotification {
private ImageView mV2XNotificationIcon;
private TextView mV2XNotificationText;
public TaxiPassengerV2XNotificationView(@Nullable Context context) {
this(context, null, 0);
}
public TaxiPassengerV2XNotificationView(@Nullable Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public TaxiPassengerV2XNotificationView(@Nullable Context context, @Nullable AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
LayoutInflater.from(context).inflate(R.layout.taxi_p_v2x_notification_view, this,
true);
mV2XNotificationIcon = findViewById(R.id.taxi_p_v2x_notification_icon_iv);
mV2XNotificationText = findViewById(R.id.taxi_p_v2x_notification_text_tv);
// 设置View的出场位置
setSidePattern(SidePattern.LEFT);
setLayoutGravity(Gravity.LEFT | Gravity.TOP);
// 设置View的停留位置相对屏幕左上角的位置
// setOffsetX(getResources().
// getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_left));
// setOffsetY(getResources().
// getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_top));
setPadding(getResources().
getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_left), getResources().
getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_top), 0, 0);
}
@Override
public void setWarningIcon(int warningIcon) {
super.setWarningIcon(warningIcon);
UiThreadHandler.post(() -> {
mV2XNotificationIcon.setImageResource(warningIcon);
});
}
@Override
public void setWarningIcon(@Nullable Drawable drawable) {
super.setWarningIcon(drawable);
UiThreadHandler.post(() -> {
mV2XNotificationIcon.setImageDrawable(drawable);
});
}
@Override
public void setWarningContent(@Nullable CharSequence warningContent) {
super.setWarningContent(warningContent);
UiThreadHandler.post(() -> {
mV2XNotificationText.setText(warningContent);
});
}
@Override
public void setWarningContent(int warningContentId) {
super.setWarningContent(warningContentId);
UiThreadHandler.post(() -> {
mV2XNotificationText.setText(warningContentId);
});
}
}

View File

@@ -1,375 +0,0 @@
package com.mogo.och.taxi.passenger.ui.video
import android.content.Context
import android.content.Intent
import android.content.res.Resources
import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.os.Looper
import android.view.View
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatImageView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.och.taxi.passenger.R
import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst
import com.mogo.och.taxi.passenger.event.FinishActivity
import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselLayoutManager
import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselZoomPostLayoutListener
import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CenterScrollListener
import com.mogo.och.taxi.passenger.utils.FixMemoryLeak
import com.mogo.och.taxi.passenger.widget.ConsultVideoPlayer
import com.mogo.och.taxi.passenger.widget.indicator.IndicatorView
import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorOrientation
import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorSlideMode
import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorStyle
import com.shuyu.gsyvideoplayer.video.base.GSYVideoView
import me.jessyan.autosize.AutoSizeCompat
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import rx.Observable
import rx.Observer
import rx.Subscription
import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers
import java.util.concurrent.TimeUnit
import kotlin.math.floor
class VideoActivity : AppCompatActivity() {
private var rvVideoPlaylist: RecyclerView? = null
private lateinit var indicatorView: IndicatorView
private lateinit var clContain: ConstraintLayout
private lateinit var acivTitleIcon: AppCompatImageView
private lateinit var tvTitle: TextView
private var subscribe: Subscription? = null
private val TAG = "mulprocessVideoActivity"
private val arrayListOf = ArrayList<TaxiPassengerVideoPlay>()
companion object {
const val VIDEOTYPE = "VIDEOTYPE"
const val VIDEOTYPE_CONSULT = 0
const val VIDEOTYPE_MOIES = 1
const val VIDEOTYPE_CLOSE = 2
const val EVENT_FINISH = 0
fun startActivity(context: Context, videoType: Int, sumDis: Int) {
val intent = Intent(context, VideoActivity::class.java)
intent.putExtra(VIDEOTYPE, videoType)
intent.putExtra(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, sumDis)
context.startActivity(intent)
}
}
private var videotype = VIDEOTYPE_CONSULT
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
setContentView(R.layout.taxi_p_arrived_mogo_consult)
initView()
configPage()
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
configPage()
}
private fun configPage() {
FullVideoUtils.dismissOverlayView(true)
releaseOnNewInstance()
when (intent.getIntExtra(VIDEOTYPE, VIDEOTYPE_CONSULT)) {
VIDEOTYPE_CONSULT -> {
videotype = VIDEOTYPE_CONSULT
acivTitleIcon.setImageResource(R.drawable.taxi_p_mogo_consult_title_icon)
tvTitle.text = "蘑菇资讯"
initConsultData()
}
VIDEOTYPE_MOIES -> {
videotype = VIDEOTYPE_MOIES
acivTitleIcon.setImageResource(R.drawable.taxi_p_mogo_movies_title_icon)
tvTitle.text = "影视娱乐"
initMoviesData()
}
}
initListener()
initData()
}
private fun initConsultData() {
arrayListOf.clear()
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969511280/车队.png",
"蘑菇车联覆盖生活的方方面面"
)
)
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png",
"蘑菇车联之红旗车队"
)
)
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969536177/大运会.png",
"蘑菇车联牵手成都大运会"
)
)
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969579713/三屏.png",
"多视角体验蘑菇车联自动驾驶"
)
)
}
private fun initMoviesData() {
arrayListOf.clear()
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558672856/小宝宝.mp4",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559345882/1.png",
"小宝宝"
)
)
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558697055/小猫.mp4",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559367261/2.png",
"小猫"
)
)
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558730074/星空.mp4",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559406169/4.png",
"星空"
)
)
arrayListOf.add(
TaxiPassengerVideoPlay(
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558644708/海浪.mp4",
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559384635/3.png",
"星空"
)
)
}
private fun initData() {
val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true)
carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener())
carouselLayoutManager.maxVisibleItems = 1
indicatorView.notifyDataChanged(arrayListOf.size)
indicatorView.setSlideMode(IndicatorSlideMode.SCALE)
indicatorView.setOrientation(IndicatorOrientation.INDICATOR_HORIZONTAL)
indicatorView.setIndicatorStyle(IndicatorStyle.ROUND_RECT)
indicatorView.setSliderColor(
Color.parseColor("#FFFFFF"), Color.parseColor("#26C5FD"),
Color.parseColor("#26C5FD")
)
indicatorView.setSliderWidth(9f, 54f)
indicatorView.setSliderHeight(9f)
indicatorView.setSliderGap(36f)
rvVideoPlaylist?.addOnScrollListener(object : CenterScrollListener() {
var prePlayerPosition = 0
override fun pageSelect(recyclerView: RecyclerView?, newState: Int) {
//播放视频
val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager)
indicatorView.onPageSelected(centerItemPosition)
if (player is ConsultVideoPlayer) {
if (prePlayerPosition != centerItemPosition) {
if (player.currentState == GSYVideoView.CURRENT_STATE_PAUSE) {
player.onVideoReset()
}
val playerHolder =
carouselLayoutManager.findViewByPosition(prePlayerPosition)
val prePlayer =
playerHolder?.findViewById<ConsultVideoPlayer>(R.id.video_item_player)
prePlayer?.onVideoReset()
val taxiPassengerVideoPlay = arrayListOf[centerItemPosition]
setBackageAndPlayNext(taxiPassengerVideoPlay)
} else {
player.onVideoResume(false)
}
}
prePlayerPosition = centerItemPosition
}
override fun pageStop() {
val (_: Int, player) = getPlayer(carouselLayoutManager)
if (player is ConsultVideoPlayer) {
player.onVideoPause()
}
}
})
carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition ->
val fl = adapterPosition - floor(adapterPosition)
var currentIndex = currentPosition
if (fl > 0.5) {
if (currentPosition == 0) {
currentIndex = rvVideoPlaylist?.adapter!!.itemCount - 1
} else {
currentIndex -= 1
}
}
indicatorView.onPageScrolled(currentIndex, fl, 0)
}
val recyclerVideoAdapter = RecyclerVideoAdapter(this, arrayListOf, rvVideoPlaylist)
recyclerVideoAdapter.setOnThumbImageClilckListener {
val (_: Int, player) = getPlayer(carouselLayoutManager)
if (player is ConsultVideoPlayer) {
player.onVideoReset()
player.thumbImageViewLayout.visibility = View.VISIBLE
}
rvVideoPlaylist?.smoothScrollToPosition(it)
}
rvVideoPlaylist?.layoutManager = carouselLayoutManager
rvVideoPlaylist?.setHasFixedSize(true)
rvVideoPlaylist?.adapter = recyclerVideoAdapter
}
private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair<Int, ConsultVideoPlayer?> {
val centerItemPosition: Int = carouselLayoutManager.centerItemPosition
val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition)
val player = playerHolder?.findViewById<ConsultVideoPlayer>(R.id.video_item_player)
return Pair(centerItemPosition, player)
}
private fun initListener() {
}
private fun initView() {
rvVideoPlaylist = findViewById(R.id.rv_video_playlist)
indicatorView = findViewById(R.id.indicatorView)
clContain = findViewById(R.id.cl_contain)
acivTitleIcon = findViewById(R.id.aciv_title_icon)
tvTitle = findViewById(R.id.tv_mogo_consult)
acivTitleIcon.setOnClickListener {
//finish()
}
}
private fun setBackageAndPlayNext(taxiPassengerVideoPlay: TaxiPassengerVideoPlay) {
// 设置背景图片
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
val sumDis = intent.getIntExtra(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0)
FloatingDistanceInfoUtils.showOverlayView(this, sumDis = sumDis)
}
override fun onResume() {
super.onResume()
val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager
val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager)
if (centerItemPosition < 0) {
setBackageAndPlayNext(arrayListOf[0])
}
player?.let {
if (player.isIfCurrentIsFullscreen) {// 全屏了
} else {
when (player.currentState) {
GSYVideoView.CURRENT_STATE_PAUSE -> {
player.onVideoResume(false)
}
GSYVideoView.CURRENT_STATE_PLAYING -> {
}
else -> {
}
}
}
}
}
override fun onPause() {
super.onPause()
val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager
val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager)
player?.let {
if (player is ConsultVideoPlayer) {
// 离开应用 暂停视频
// 关闭 onDetachedFromWindow 会reset
if (player.isIfCurrentIsFullscreen) {// 全屏了
} else {
player.onVideoPause()
}
}
}
cancleSubscribe()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun finishActivity(event: FinishActivity) {
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "finishActivity(event)")
cancleSubscribe()
val intent = Intent()
val parse = Uri.parse("mogo://launcher/main/switch2?type=launch")
intent.data = parse
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
startActivity(intent)
finish()
}
override fun onDestroy() {
CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "onDestroy()")
super.onDestroy()
EventBus.getDefault().unregister(this)
releaseOnNewInstance()
FloatingDistanceInfoUtils.dismissOverlayView()
FixMemoryLeak.fixLeak(this)
cancleSubscribe()
}
private fun cancleSubscribe() {
subscribe?.let {
if (!it.isUnsubscribed) {
it.unsubscribe()
}
}
}
private fun releaseOnNewInstance() {
if (rvVideoPlaylist != null && rvVideoPlaylist?.layoutManager != null) {
val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager
val (_: Int, player) = getPlayer(carouselLayoutManager)
player?.let {
player.currentPlayer.release()
player.onVideoReset()
}
}
FullVideoUtils.dismissOverlayView(true)
}
override fun onBackPressed() {}
override fun getResources(): Resources? {
if (Looper.myLooper() == Looper.getMainLooper()) {
AutoSizeCompat.autoConvertDensityOfGlobal(super.getResources())
}
return super.getResources()
}
}

View File

@@ -145,12 +145,10 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
override fun onWindowFocusChanged(hasWindowFocus: Boolean) {
super.onWindowFocusChanged(hasWindowFocus)
if(isIfCurrentIsFullscreen&&smalllPlayer!=null){
if(hasWindowFocus){//获取焦点
onVideoResume()
}else{
onVideoPause()
}
if(hasWindowFocus){//获取焦点
onVideoResume()
}else{
onVideoPause()
}
}

View File

@@ -1,62 +0,0 @@
<?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"
android:background="@drawable/taxi_p_video_bg"
tools:ignore="MissingDefaultResource">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_title_icon"
android:src="@drawable/taxi_p_mogo_consult_title_icon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="157dp"
android:layout_marginStart="120dp"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"/>
<TextView
android:id="@+id/tv_mogo_consult"
app:layout_constraintTop_toTopOf="@+id/aciv_title_icon"
app:layout_constraintBottom_toBottomOf="@+id/aciv_title_icon"
app:layout_constraintStart_toEndOf="@+id/aciv_title_icon"
android:text="蘑菇资讯"
android:textSize="48dp"
android:layout_marginStart="34dp"
android:includeFontPadding="false"
android:textColor="@color/taxi_order_status_textColor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_video_playlist"
android:layout_width="match_parent"
android:layout_height="940dp"
android:orientation="horizontal"
android:layout_marginTop="156dp"
android:layout_marginStart="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_mogo_consult"/>
<com.mogo.och.taxi.passenger.widget.indicator.IndicatorView
android:id="@+id/indicatorView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rv_video_playlist"
android:layout_marginTop="67dp"
app:vpi_orientation="horizontal"
app:vpi_slide_mode="scale"
app:vpi_slider_checked_color="@color/taxi_p_traffic_light_red_color_up"
app:vpi_slider_normal_color="@color/taxi_p_check_keyboard_input_field"
app:vpi_slider_radius="@dimen/dp_20"
app:vpi_style="round_rect" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -14,6 +14,10 @@
app:endPointDrawable="@drawable/taxi_p_map_view_dir_end"
app:mapStyleExtraPath="style_extra.data"
app:mapStylePath="style.data"
app:leftPadding="80"
app:rightPadding="80"
app:topPadding="120"
app:bottomPadding="160"
/>
<!-- 视频播放View -->
@@ -108,14 +112,6 @@
app:user="taxi_p"
/>
<com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugViewTrigger
android:layout_width="@dimen/dp_400"
android:layout_height="@dimen/dp_100"
android:longClickable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 路程信息 -->
<com.mogo.och.taxi.passenger.ui.orderinfo.ItineraryView
android:id="@+id/itinerary"