diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java index bffc6c92c2..baf652f845 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java @@ -26,6 +26,7 @@ import com.mogo.och.taxi.passenger.R; import com.mogo.och.taxi.passenger.callback.ITPClickStartAutopilotCallback; import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter; import com.mogo.och.taxi.passenger.ui.comment.TaxiPassengerArrivedView; +import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils; import java.lang.ref.WeakReference; @@ -122,8 +123,8 @@ public class TaxiPassengerBaseFragment extends MvpFragment { - //OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity()); - showOrHideArrivedEndLayout(true, "北京北京北京", "1527481606997577728"); + OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity()); + //showOrHideArrivedEndLayout(true, "北京北京北京", "1527481606997577728"); //showOrHidePressengerCheckPager(true, "开始站点开", "开始站点开始站点开始", "2", "京A888888", "18811539480"); //OCHFloatWindowManager.getInstance().ShowFloatWindow(getContext()); //OverlayViewUtils.showOverlayView(getActivity(),new TaxiPassengerMogoConsultView(getContext())); @@ -258,6 +259,7 @@ public class TaxiPassengerBaseFragment extends MvpFragment { - player.onVideoResume(false) - } - else -> { - val recyclerVideoAdapter = - rvVideoPlaylist.adapter as RecyclerVideoAdapter - setBackageAndPlayNext(recyclerVideoAdapter.getItemByPosition(centerItemPosition), player, centerItemPosition) - player.startPlayLogic() + if(player.isIfCurrentIsFullscreen){// 全屏了 + + }else { + when (player.currentState) { + GSYVideoView.CURRENT_STATE_PAUSE -> { + player.onVideoResume(false) + } + GSYVideoView.CURRENT_STATE_PLAYING -> { + } + else -> { + val recyclerVideoAdapter = + rvVideoPlaylist.adapter as RecyclerVideoAdapter + setBackageAndPlayNext( + recyclerVideoAdapter.getItemByPosition(centerItemPosition), + player, centerItemPosition + ) + player.startPlayLogic() + } } } }else { // 离开应用 暂停视频 // 关闭 onDetachedFromWindow 会reset - player.onVideoPause() + if(player.isIfCurrentIsFullscreen){// 全屏了 + + }else { + player.onVideoPause() + } } } @@ -194,6 +207,7 @@ class TaxiPassengerMogoConsultView :RelativeLayout { player.onVideoReset() } } + FullVideoUtils.dismissOverlayView() } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt index 28ae85501b..d906165813 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt @@ -1,23 +1,26 @@ package com.mogo.och.taxi.passenger.widget +import android.app.Activity import android.content.Context +import android.graphics.Color import android.util.AttributeSet -import android.view.Surface -import android.view.View +import android.view.* +import android.widget.FrameLayout import android.widget.ImageView import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout -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.TimeTransformUtils import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel -import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.mogo.och.taxi.passenger.ui.video.FullVideoUtils +import com.shuyu.gsyvideoplayer.utils.CommonUtil +import com.shuyu.gsyvideoplayer.utils.Debuger import com.shuyu.gsyvideoplayer.utils.GSYVideoType import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer +import com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer +import com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer import com.shuyu.gsyvideoplayer.video.base.GSYVideoView -import com.shuyu.gsyvideoplayer.video.base.GSYVideoViewBridge +import java.lang.reflect.Constructor /** * @author lixiaopeng @@ -31,6 +34,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { lateinit var coverImage: ImageView private lateinit var currentTimeTextView: TextView private lateinit var totalTimeTextView: TextView + private lateinit var tvTitle: TextView private lateinit var layoutBottom: ConstraintLayout constructor(context: Context?) : super(context) @@ -38,12 +42,15 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { constructor(context: Context?, fullFlag: Boolean?) : super(context, fullFlag) override fun init(context: Context) { + mEnlargeImageRes = R.drawable.taxi_p_change_full super.init(context) start = findViewById(R.id.start) coverImage = findViewById(R.id.thumbImage) currentTimeTextView = findViewById(R.id.current) totalTimeTextView = findViewById(R.id.total) layoutBottom = findViewById(R.id.layout_bottom) + tvTitle = findViewById(R.id.tv_title) + fullscreenButton.setOnClickListener(this) if (mThumbImageViewLayout != null && (mCurrentState == -1 || mCurrentState == CURRENT_STATE_NORMAL || mCurrentState == CURRENT_STATE_ERROR) ) { @@ -56,9 +63,8 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { return R.layout.taxi_p_video_show } - override fun getGSYVideoManager(): GSYVideoViewBridge { - GSYVideoManager.instance().initContext(context.applicationContext) - return GSYVideoManager.instance() + fun setTitle(title:String){ + tvTitle.text = title } override fun updateStartImage() { @@ -98,10 +104,20 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { mProgressBar?.progress = 0 mFullPauseBitmap = null + if(mIfCurrentIsFullscreen){ + FullVideoUtils.dismissOverlayView() + clearFullscreenLayout() + } } override fun onClick(v: View?) { super.onClick(v) + when (v?.id) { + R.id.fullscreen -> { + startWindowFullscreenOwn(context, false, false) + } + else -> {} + } } override fun onCompletion() { @@ -144,6 +160,14 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { } } + override fun onAutoCompletion() { + super.onAutoCompletion() + if(mIfCurrentIsFullscreen){ + FullVideoUtils.dismissOverlayView() + clearFullscreenLayout() + } + } + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { super.onSizeChanged(w, h, oldw, oldh) if (!mIfCurrentIsFullscreen) { @@ -152,5 +176,210 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { } } + /** + * 保存大小和状态 + */ + private fun saveLocationStatus(context: Context, statusBar: Boolean, actionBar: Boolean) { + getLocationOnScreen(mListItemRect) + if (context is Activity) { + val statusBarH = CommonUtil.getStatusBarHeight(context) + val actionBerH = CommonUtil.getActionBarHeight(context) + val isTranslucent = + (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS and context.window.attributes.flags + == WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) + if (statusBar && !isTranslucent) { + mListItemRect[1] = mListItemRect[1] - statusBarH + } + if (actionBar) { + mListItemRect[1] = mListItemRect[1] - actionBerH + } + } + mListItemSize[0] = width + mListItemSize[1] = height + } + + private fun startWindowFullscreenOwn(context:Context, actionBar:Boolean, statusBar:Boolean){ + val gsyBaseVideoPlayer = startWindowFullscreen(context, actionBar, statusBar) + gsyBaseVideoPlayer?.let { + val gsyVideoPlayer = it as StandardGSYVideoPlayer + gsyVideoPlayer.setLockClickListener(mLockClickListener) + gsyVideoPlayer.isNeedLockFull = isNeedLockFull + initFullUI(gsyVideoPlayer) + } + } + + private fun initFullUI(standardGSYVideoPlayer: StandardGSYVideoPlayer) { + if (mBottomProgressDrawable != null) { + standardGSYVideoPlayer.setBottomProgressBarDrawable(mBottomProgressDrawable) + } + if (mBottomShowProgressDrawable != null && mBottomShowProgressThumbDrawable != null) { + standardGSYVideoPlayer.setBottomShowProgressBarDrawable( + mBottomShowProgressDrawable, + mBottomShowProgressThumbDrawable + ) + } + if (mVolumeProgressDrawable != null) { + standardGSYVideoPlayer.setDialogVolumeProgressBar(mVolumeProgressDrawable) + } + if (mDialogProgressBarDrawable != null) { + standardGSYVideoPlayer.setDialogProgressBar(mDialogProgressBarDrawable) + } + if (mDialogProgressHighLightColor >= 0 && mDialogProgressNormalColor >= 0) { + standardGSYVideoPlayer.setDialogProgressColor( + mDialogProgressHighLightColor, + mDialogProgressNormalColor + ) + } + } + + override fun startWindowFullscreen(context:Context, actionBar:Boolean, statusBar:Boolean):GSYBaseVideoPlayer?{ + mSystemUiVisibility = (context as Activity).window.decorView.systemUiVisibility + CommonUtil.hideSupportActionBar(context, actionBar, statusBar) + if (mHideKey) { + CommonUtil.hideNavKey(context) + } + mActionBar = actionBar + mStatusBar = statusBar + mListItemRect = IntArray(2) + mListItemSize = IntArray(2) + + if (mTextureViewContainer.childCount > 0) { + mTextureViewContainer.removeAllViews() + } + saveLocationStatus(context, statusBar, actionBar) + var hadNewConstructor = true + + //切换时关闭非全屏定时器 + cancelProgressTimer() + try { + this@ConsultVideoPlayer.javaClass.getConstructor( + Context::class.java, + Boolean::class.java + ) + } catch (e: java.lang.Exception) { + hadNewConstructor = false + } + try { + //通过被重载的不同构造器来选择 + val constructor: Constructor + val gsyVideoPlayer: ConsultVideoPlayer + if (!hadNewConstructor) { + constructor = this@ConsultVideoPlayer.javaClass.getConstructor(Context::class.java) + gsyVideoPlayer = constructor.newInstance(mContext) + } else { + constructor = this@ConsultVideoPlayer.javaClass.getConstructor( + Context::class.java, + Boolean::class.java + ) + gsyVideoPlayer = constructor.newInstance(mContext, true) + } + gsyVideoPlayer.id = fullId + gsyVideoPlayer.isIfCurrentIsFullscreen = true + gsyVideoPlayer.setVideoAllCallBack(mVideoAllCallBack) + cloneParams(this, gsyVideoPlayer) + val frameLayout = FrameLayout(context) + if (gsyVideoPlayer.fullscreenButton != null) { + gsyVideoPlayer.fullscreenButton.setImageResource(R.drawable.taxi_p_change_normal) + gsyVideoPlayer.fullscreenButton.setOnClickListener { v -> + if (mBackFromFullScreenListener == null) { + FullVideoUtils.dismissOverlayView() + clearFullscreenLayout(gsyVideoPlayer) + } else { + mBackFromFullScreenListener.onClick(v) + } + } + } + frameLayout.setBackgroundColor(Color.BLACK) + + val lp = LayoutParams( + width, height + ) + frameLayout.addView(gsyVideoPlayer, lp) + FullVideoUtils.showOverlayView(context,frameLayout) + gsyVideoPlayer.visibility = INVISIBLE + frameLayout.visibility = INVISIBLE + resolveFullVideoShow(context, gsyVideoPlayer, frameLayout) + + gsyVideoPlayer.addTextureView() + gsyVideoPlayer.startProgressTimer() + gsyVideoManager.setLastListener(this) + gsyVideoManager.setListener(gsyVideoPlayer) + checkoutState() + return gsyVideoPlayer + } catch (e: java.lang.Exception) { + e.printStackTrace() + } + + return null + } + + /** + * 全屏 + */ + override fun resolveFullVideoShow( + context: Context?, + gsyVideoPlayer: GSYBaseVideoPlayer, + frameLayout: FrameLayout + ) { + val lp = gsyVideoPlayer.layoutParams as LayoutParams + lp.setMargins(0, 0, 0, 0) + lp.height = ViewGroup.LayoutParams.MATCH_PARENT + lp.width = ViewGroup.LayoutParams.MATCH_PARENT + lp.gravity = Gravity.CENTER + gsyVideoPlayer.layoutParams = lp + gsyVideoPlayer.isIfCurrentIsFullscreen = true + val isVertical = isVerticalFullByVideoSize + val isLockLand = isLockLandByAutoFullSize + if (isShowFullAnimation) { + mInnerHandler.postDelayed({ //autoFull模式下,非横屏视频视频不横屏,并且不自动旋转 + if (!isVertical && isLockLand && mOrientationUtils != null && mOrientationUtils.isLand != 1) { + mOrientationUtils.resolveByClick() + } + gsyVideoPlayer.visibility = VISIBLE + frameLayout.visibility = VISIBLE + }, 300) + } else { + if (!isVertical && isLockLand && mOrientationUtils != null) { + mOrientationUtils.resolveByClick() + } + gsyVideoPlayer.visibility = VISIBLE + frameLayout.visibility = VISIBLE + } + if (mVideoAllCallBack != null) { + Debuger.printfError("onEnterFullscreen") + mVideoAllCallBack.onEnterFullscreen(mOriginUrl, mTitle, gsyVideoPlayer) + } + mIfCurrentIsFullscreen = true + checkoutState() + checkAutoFullWithSizeAndAdaptation(gsyVideoPlayer) + } + + fun clearFullscreenLayout(gsyVideoPlayer:GSYVideoPlayer) { + mIfCurrentIsFullscreen = false + val delay = 0 + mInnerHandler.postDelayed({ resolveNormalVideoShow(gsyVideoPlayer) }, delay.toLong()) + } + + private fun resolveNormalVideoShow(gsyVideoPlayer: GSYVideoPlayer) { + mCurrentState = gsyVideoManager.lastState + cloneParams(gsyVideoPlayer, this) + gsyVideoManager.setListener(gsyVideoManager.lastListener()) + gsyVideoManager.setLastListener(null) + setStateAndUi(mCurrentState) + addTextureView() + mSaveChangeViewTIme = System.currentTimeMillis() + if (mVideoAllCallBack != null) { + Debuger.printfError("onQuitFullscreen") + mVideoAllCallBack.onQuitFullscreen(mOriginUrl, mTitle, this) + } + mIfCurrentIsFullscreen = false + if (mHideKey) { + CommonUtil.showNavKey(mContext, mSystemUiVisibility) + } + CommonUtil.showSupportActionBar(mContext, mActionBar, mStatusBar) + if (fullscreenButton != null) { + fullscreenButton.setImageResource(enlargeImageRes) + } + } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_full.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_full.png new file mode 100644 index 0000000000..d8084f5fce Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_full.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_normal.png new file mode 100644 index 0000000000..90f33faa6d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_holder.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_holder.png new file mode 100644 index 0000000000..fc93b708dd Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_holder.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png new file mode 100644 index 0000000000..d8084f5fce Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png new file mode 100644 index 0000000000..90f33faa6d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_holder.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_holder.png new file mode 100644 index 0000000000..99bfcefc6f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_holder.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_video_holder.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_video_holder.png new file mode 100644 index 0000000000..99bfcefc6f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_video_holder.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml index c160faf6c8..a4ab570b9f 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_video_show.xml @@ -17,11 +17,43 @@ android:layout_height="match_parent"> + + + + + + + +