diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/TaxiPassengerVideoPlay.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/TaxiPassengerVideoPlay.kt index da6e23a8e8..1209e54ec9 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/TaxiPassengerVideoPlay.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/bean/TaxiPassengerVideoPlay.kt @@ -1,3 +1,3 @@ package com.mogo.och.unmanned.passenger.bean -class TaxiPassengerVideoPlay(var url: String, var imageUrl: String, var title: String, var type: Int) \ No newline at end of file +class TaxiPassengerVideoPlay(var url: String, var imageUrl: String, var title: String, var type: Int,var isPlayiing:Boolean=false) \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/video/InfoVideoView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/video/InfoVideoView.kt index 96c11e7844..73e24dc31a 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/video/InfoVideoView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/video/InfoVideoView.kt @@ -3,12 +3,13 @@ package com.mogo.och.unmanned.passenger.ui.video import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater -import android.widget.FrameLayout import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.function.main.MainMoGoApplication +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.wigets.WrapContentLinearLayoutManager import com.mogo.och.common.module.wigets.media.IMediaDataSourceListener @@ -17,11 +18,17 @@ import com.mogo.och.common.module.wigets.media.MediaFileCacheManager import com.mogo.och.common.module.wigets.media.MediaItem import com.mogo.och.common.module.wigets.media.MediaPlayLogger import com.mogo.och.unmanned.passenger.bean.TaxiPassengerVideoPlay -import com.mogo.och.unmanned.taxi.passenger.R +import com.mogo.och.unmanned.passenger.ui.video.RecyclerVideoAdapterNew.OnThumbImageClilckListener import com.mogo.och.unmanned.passenger.ui.video.layoutmanage.CarouselLayoutManager import com.mogo.och.unmanned.passenger.widget.ConsultVideoPlayer +import com.mogo.och.unmanned.taxi.passenger.R import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack +import com.shuyu.gsyvideoplayer.video.base.GSYVideoView import kotlinx.android.synthetic.main.taxt_u_p_mogo_video_layout.view.infoVideoPlaylist +import kotlinx.android.synthetic.main.taxt_u_p_mogo_video_layout.view.tv_playing_title +import kotlinx.android.synthetic.main.taxt_u_p_mogo_video_layout.view.video_item_player /** * @author ChenFufeng @@ -42,9 +49,13 @@ internal class InfoVideoView @JvmOverloads constructor( } private val mediaList = mutableListOf() + //新的数据,在view不展示的时候完成新数据更新 private val mNewMediaList = mutableListOf() + private var currentMedia: TaxiPassengerVideoPlay? = null + + private var currentMediaIndex = 0 init { LayoutInflater.from(context).inflate(R.layout.taxt_u_p_mogo_video_layout, this, true) @@ -70,7 +81,13 @@ internal class InfoVideoView @JvmOverloads constructor( MediaDataSourceManager.init(TAG, object : IMediaDataSourceListener { override fun onMediaDataSourceChanged(list: List) { val isNewData = mediaList.isNotEmpty() - MediaPlayLogger.printInfoLog("onMediaDataSourceChanged:isNewData=$isNewData, dataSize=${list.size}, list=${GsonUtils.toJson(list)}") + MediaPlayLogger.printInfoLog( + "onMediaDataSourceChanged:isNewData=$isNewData, dataSize=${list.size}, list=${ + GsonUtils.toJson( + list + ) + }" + ) val localMediaList = mutableListOf() list.forEach { val taxiPassengerVideoPlay = TaxiPassengerVideoPlay( @@ -102,21 +119,74 @@ internal class InfoVideoView @JvmOverloads constructor( mediaList.addAll(newList) mediaList.addAll(newList) UiThreadHandler.post { - initView() + updateData() + infoVideoPlaylist.adapter?.notifyDataSetChanged() } } private fun initView() { - infoVideoPlaylist.layoutManager = WrapContentLinearLayoutManager(context,RecyclerView.VERTICAL,false) + infoVideoPlaylist.layoutManager = + WrapContentLinearLayoutManager(context, RecyclerView.VERTICAL, false) infoVideoPlaylist.addItemDecoration(SpacesItemDecoration(40, 140)) - infoVideoPlaylist.adapter = RecyclerVideoAdapterNew(context, mediaList) + infoVideoPlaylist.adapter = RecyclerVideoAdapterNew(context, mediaList).apply { + setOnThumbImageClilckListener(object : OnThumbImageClilckListener{ + override fun onDxChanged(targetPosition: Int) { + currentMediaIndex = targetPosition + updateData() + } + }) + } + video_item_player.onStatusChangeListener = object :ConsultVideoPlayer.OnPlayStatusListener{ + override fun onStatusChange(status: Int) { + mediaList.forEachIndexed { index, taxiPassengerVideoPlay -> + if (taxiPassengerVideoPlay.isPlayiing) { + taxiPassengerVideoPlay.isPlayiing = false + infoVideoPlaylist.adapter?.notifyItemChanged(index) + } + } + when (status) { + GSYVideoView.CURRENT_STATE_PLAYING ->{ + currentMedia?.isPlayiing = true + infoVideoPlaylist.adapter?.notifyItemChanged(currentMediaIndex) + } + else ->{ + currentMedia?.isPlayiing = false + infoVideoPlaylist.adapter?.notifyItemChanged(currentMediaIndex) + } + } + } + + } + video_item_player.setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onAutoComplete(url: String?, vararg objects: Any?) { + if (currentMediaIndex + 1 >= mediaList.size) { + currentMediaIndex = 0 + } else { + currentMediaIndex += 1 + } + updateData() + } + + override fun onClickStartIcon(url: String?, vararg objects: Any?) { + CallerLogger.d(TAG,"开始播放了:${url}") + } + + override fun onPlayError(url: String?, vararg objects: Any?) { + ToastUtils.showLong("哎呀,出错了,看看其他视频吧") + } + + override fun onClickStartError(url: String?, vararg objects: Any?) { + ToastUtils.showLong("哎呀,出错了,看看其他视频吧") + } + }) } - private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair { - val centerItemPosition: Int = carouselLayoutManager.centerItemPosition - val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition) - val player = playerHolder?.findViewById(R.id.video_item_player) - return Pair(centerItemPosition, player) + private fun updateData() { + if (mediaList.isNotEmpty() && currentMediaIndex < mediaList.size) { + currentMedia = mediaList[currentMediaIndex] + tv_playing_title.text = currentMedia?.title + video_item_player.setData(currentMedia!!) + } } override fun onDetachedFromWindow() { diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/video/RecyclerVideoAdapter.java b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/video/RecyclerVideoAdapter.java index c895d429ae..6bc8df9efb 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/video/RecyclerVideoAdapter.java +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/video/RecyclerVideoAdapter.java @@ -73,7 +73,7 @@ public class RecyclerVideoAdapter extends RecyclerView.Adapter{ start.setImageResource(R.drawable.notice_video_pause) @@ -547,5 +563,36 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { } aivStartPlay?.visibility = if (isShow ) View.VISIBLE else View.GONE } + fun playStatusListener(){ + + } + + fun setData(currentMedia: TaxiPassengerVideoPlay) { + if(gsyVideoOptionBuilder==null){ + gsyVideoOptionBuilder = GSYVideoOptionBuilder() + } + + gsyVideoOptionBuilder + ?.setEnlargeImageRes(R.drawable.taxt_u_p_change_full) + ?.setUrl(currentMedia.url) + ?.setCacheWithPlay(true) + ?.setPlayTag(currentMedia.url) + ?.setThumbPlay(false) + ?.setStartAfterPrepared(currentMedia.type == MediaItem.MEDIA_TYPE_VIDEO) + ?.build(this) + setFileType(currentMedia.type) + + coverImage + + Glide.with(context) + .load(currentMedia.imageUrl) + .apply(RequestOptions().placeholder(placeholderDrawable).centerCrop()) + .into(coverImage) + } + + interface OnPlayStatusListener { + fun onStatusChange(status: Int) + } + } diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxi_p_road_video_bg.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxi_p_road_video_bg.png new file mode 100644 index 0000000000..52a3802f75 Binary files /dev/null and b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxi_p_road_video_bg.png differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_list_video_item.xml b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_list_video_item.xml index b6a928890c..1ac274eb50 100644 --- a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_list_video_item.xml +++ b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_list_video_item.xml @@ -33,6 +33,7 @@ android:layout_marginStart="@dimen/dp_18" android:layout_marginEnd="@dimen/dp_10" android:textSize="@dimen/dp_29" + android:ellipsize="end" android:textColor="@color/white" android:singleLine="true" android:text="蘑菇车联湖南衡阳蘑菇车联湖南衡阳智…" diff --git a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_mogo_video_layout.xml b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_mogo_video_layout.xml index 7ce2094f4a..abb5c60b80 100644 --- a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_mogo_video_layout.xml +++ b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_mogo_video_layout.xml @@ -8,6 +8,29 @@ android:background="@drawable/taxt_u_p_video_light_bg" tools:ignore="MissingDefaultResource"> + + + + +