package com.zwh.mvparms.eyepetizer.mvp.ui.widget.video; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.shuyu.gsyvideoplayer.listener.StandardVideoAllCallBack; import com.shuyu.gsyvideoplayer.utils.Debuger; import com.shuyu.gsyvideoplayer.utils.NetworkUtils; import com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer; import com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer; import com.zwh.mvparms.eyepetizer.R; import moe.codeest.enviews.ENDownloadView; /** * Created by Administrator on 2017/9/6 0006. */ public class StandardGSYVideoPlayer extends GSYVideoPlayer { protected StandardVideoAllCallBack mStandardVideoAllCallBack; //亮度dialog protected Dialog mBrightnessDialog; //音量dialog protected Dialog mVolumeDialog; //触摸进度dialog protected Dialog mProgressDialog; //触摸进度条的progress protected ProgressBar mDialogProgressBar; //音量进度条的progress protected ProgressBar mDialogVolumeProgressBar; //亮度文本 protected TextView mBrightnessDialogTv; //触摸移动显示文本 protected TextView mDialogSeekTime; //触摸移动显示全部时间 protected TextView mDialogTotalTime; //触摸移动方向icon protected ImageView mDialogIcon; protected Drawable mBottomProgressDrawable; protected Drawable mBottomShowProgressDrawable; protected Drawable mBottomShowProgressThumbDrawable; protected Drawable mVolumeProgressDrawable; protected Drawable mDialogProgressBarDrawable; protected int mDialogProgressHighLightColor = -11; protected int mDialogProgressNormalColor = -11; /** * 1.5.0开始加入,如果需要不同布局区分功能,需要重载 */ public StandardGSYVideoPlayer(Context context, Boolean fullFlag) { super(context, fullFlag); } public StandardGSYVideoPlayer(Context context) { super(context); } public StandardGSYVideoPlayer(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void init(Context context) { super.init(context); //增加自定义ui if (mBottomProgressDrawable != null) { mBottomProgressBar.setProgressDrawable(mBottomProgressDrawable); } if (mBottomShowProgressDrawable != null) { mProgressBar.setProgressDrawable(mBottomProgressDrawable); } if (mBottomShowProgressThumbDrawable != null) { mProgressBar.setThumb(mBottomShowProgressThumbDrawable); } } /** * 继承后重写可替换为你需要的布局 * * @return */ @Override public int getLayoutId() { return R.layout.video_layout_standard; } /** * 显示wifi确定框 */ @Override public void startPlayLogic() { if (mStandardVideoAllCallBack != null) { Debuger.printfLog("onClickStartThumb"); mStandardVideoAllCallBack.onClickStartThumb(mOriginUrl, mTitle, StandardGSYVideoPlayer.this); } prepareVideo(); startDismissControlViewTimer(); } /** * 显示wifi确定框,如需要自定义继承重写即可 */ @Override protected void showWifiDialog() { if (!NetworkUtils.isAvailable(mContext)) { Toast.makeText(mContext, getResources().getString(R.string.no_net), Toast.LENGTH_LONG).show(); return; } AlertDialog.Builder builder = new AlertDialog.Builder(getActivityContext()); builder.setMessage(getResources().getString(R.string.tips_not_wifi)); builder.setPositiveButton(getResources().getString(R.string.tips_not_wifi_confirm), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); startPlayLogic(); } }); builder.setNegativeButton(getResources().getString(R.string.tips_not_wifi_cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } /** * 触摸显示滑动进度dialog,如需要自定义继承重写即可,记得重写dismissProgressDialog */ @Override @SuppressWarnings("ResourceType") protected void showProgressDialog(float deltaX, String seekTime, int seekTimePosition, String totalTime, int totalTimeDuration) { if (mProgressDialog == null) { View localView = LayoutInflater.from(getActivityContext()).inflate(R.layout.video_progress_dialog, null); mDialogProgressBar = ((ProgressBar) localView.findViewById(R.id.duration_progressbar)); if (mDialogProgressBarDrawable != null) { mDialogProgressBar.setProgressDrawable(mDialogProgressBarDrawable); } mDialogSeekTime = ((TextView) localView.findViewById(R.id.tv_current)); mDialogTotalTime = ((TextView) localView.findViewById(R.id.tv_duration)); mDialogIcon = ((ImageView) localView.findViewById(R.id.duration_image_tip)); mProgressDialog = new Dialog(getActivityContext(), R.style.video_style_dialog_progress); mProgressDialog.setContentView(localView); mProgressDialog.getWindow().addFlags(Window.FEATURE_ACTION_BAR); mProgressDialog.getWindow().addFlags(32); mProgressDialog.getWindow().addFlags(16); mProgressDialog.getWindow().setLayout(getWidth(), getHeight()); if (mDialogProgressNormalColor != -11) { mDialogTotalTime.setTextColor(mDialogProgressNormalColor); } if (mDialogProgressHighLightColor != -11) { mDialogSeekTime.setTextColor(mDialogProgressHighLightColor); } WindowManager.LayoutParams localLayoutParams = mProgressDialog.getWindow().getAttributes(); localLayoutParams.gravity = Gravity.TOP; localLayoutParams.width = getWidth(); localLayoutParams.height = getHeight(); int location[] = new int[2]; getLocationOnScreen(location); localLayoutParams.x = location[0]; localLayoutParams.y = location[1]; mProgressDialog.getWindow().setAttributes(localLayoutParams); } if (!mProgressDialog.isShowing()) { mProgressDialog.show(); } mDialogSeekTime.setText(seekTime); mDialogTotalTime.setText(" / " + totalTime); if (totalTimeDuration > 0) mDialogProgressBar.setProgress(seekTimePosition * 100 / totalTimeDuration); if (deltaX > 0) { mDialogIcon.setBackgroundResource(R.drawable.video_forward_icon); } else { mDialogIcon.setBackgroundResource(R.drawable.video_backward_icon); } } @Override protected void dismissProgressDialog() { if (mProgressDialog != null) { mProgressDialog.dismiss(); mProgressDialog = null; } } /** * 触摸音量dialog,如需要自定义继承重写即可,记得重写dismissVolumeDialog */ @Override protected void showVolumeDialog(float deltaY, int volumePercent) { if (mVolumeDialog == null) { View localView = LayoutInflater.from(getActivityContext()).inflate(R.layout.video_volume_dialog, null); mDialogVolumeProgressBar = ((ProgressBar) localView.findViewById(R.id.volume_progressbar)); if (mVolumeProgressDrawable != null) { mDialogVolumeProgressBar.setProgressDrawable(mVolumeProgressDrawable); } mVolumeDialog = new Dialog(getActivityContext(), R.style.video_style_dialog_progress); mVolumeDialog.setContentView(localView); mVolumeDialog.getWindow().addFlags(8); mVolumeDialog.getWindow().addFlags(32); mVolumeDialog.getWindow().addFlags(16); mVolumeDialog.getWindow().setLayout(-2, -2); WindowManager.LayoutParams localLayoutParams = mVolumeDialog.getWindow().getAttributes(); localLayoutParams.gravity = Gravity.TOP | Gravity.LEFT; localLayoutParams.width = getWidth(); localLayoutParams.height = getHeight(); int location[] = new int[2]; getLocationOnScreen(location); localLayoutParams.x = location[0]; localLayoutParams.y = location[1]; mVolumeDialog.getWindow().setAttributes(localLayoutParams); } if (!mVolumeDialog.isShowing()) { mVolumeDialog.show(); } mDialogVolumeProgressBar.setProgress(volumePercent); } @Override protected void dismissVolumeDialog() { if (mVolumeDialog != null) { mVolumeDialog.dismiss(); mVolumeDialog = null; } } /** * 触摸亮度dialog,如需要自定义继承重写即可,记得重写dismissBrightnessDialog */ @Override protected void showBrightnessDialog(float percent) { if (mBrightnessDialog == null) { View localView = LayoutInflater.from(getActivityContext()).inflate(R.layout.video_brightness, null); mBrightnessDialogTv = (TextView) localView.findViewById(R.id.app_video_brightness); mBrightnessDialog = new Dialog(getActivityContext(), R.style.video_style_dialog_progress); mBrightnessDialog.setContentView(localView); mBrightnessDialog.getWindow().addFlags(8); mBrightnessDialog.getWindow().addFlags(32); mBrightnessDialog.getWindow().addFlags(16); mBrightnessDialog.getWindow().setLayout(-2, -2); WindowManager.LayoutParams localLayoutParams = mBrightnessDialog.getWindow().getAttributes(); localLayoutParams.gravity = Gravity.TOP | Gravity.RIGHT; localLayoutParams.width = getWidth(); localLayoutParams.height = getHeight(); int location[] = new int[2]; getLocationOnScreen(location); localLayoutParams.x = location[0]; localLayoutParams.y = location[1]; mBrightnessDialog.getWindow().setAttributes(localLayoutParams); } if (!mBrightnessDialog.isShowing()) { mBrightnessDialog.show(); } if (mBrightnessDialogTv != null) mBrightnessDialogTv.setText((int) (percent * 100) + "%"); } @Override protected void dismissBrightnessDialog() { if (mBrightnessDialog != null) { mBrightnessDialog.dismiss(); mBrightnessDialog = null; } } /** * 将自定义的效果也设置到全屏 * * @param context * @param actionBar 是否有actionBar,有的话需要隐藏 * @param statusBar 是否有状态bar,有的话需要隐藏 * @return */ @Override public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) { GSYBaseVideoPlayer gsyBaseVideoPlayer = super.startWindowFullscreen(context, actionBar, statusBar); if (gsyBaseVideoPlayer != null) { StandardGSYVideoPlayer gsyVideoPlayer = (StandardGSYVideoPlayer) gsyBaseVideoPlayer; gsyVideoPlayer.setStandardVideoAllCallBack(mStandardVideoAllCallBack); gsyVideoPlayer.setLockClickListener(mLockClickListener); gsyVideoPlayer.setNeedLockFull(isNeedLockFull()); initFullUI(gsyVideoPlayer); //比如你自定义了返回案件,但是因为返回按键底层已经设置了返回事件,所以你需要在这里重新增加的逻辑 } return gsyBaseVideoPlayer; } /********************************各类UI的状态显示*********************************************/ /** * 点击触摸显示和隐藏逻辑 */ @Override protected void onClickUiToggle() { if (mIfCurrentIsFullscreen && mLockCurScreen && mNeedLockFull) { setViewShowState(mLockScreen, VISIBLE); return; } if (mCurrentState == CURRENT_STATE_PREPAREING) { if (mBottomContainer != null) { if (mBottomContainer.getVisibility() == View.VISIBLE) { changeUiToPrepareingClear(); } else { changeUiToPreparingShow(); } } } else if (mCurrentState == CURRENT_STATE_PLAYING) { if (mBottomContainer != null) { if (mBottomContainer.getVisibility() == View.VISIBLE) { changeUiToPlayingClear(); } else { changeUiToPlayingShow(); } } } else if (mCurrentState == CURRENT_STATE_PAUSE) { if (mBottomContainer != null) { if (mBottomContainer.getVisibility() == View.VISIBLE) { changeUiToPauseClear(); } else { changeUiToPauseShow(); } } } else if (mCurrentState == CURRENT_STATE_AUTO_COMPLETE) { if (mBottomContainer != null) { if (mBottomContainer.getVisibility() == View.VISIBLE) { changeUiToCompleteClear(); } else { changeUiToCompleteShow(); } } } else if (mCurrentState == CURRENT_STATE_PLAYING_BUFFERING_START) { if (mBottomContainer != null) { if (mBottomContainer.getVisibility() == View.VISIBLE) { changeUiToPlayingBufferingClear(); } else { changeUiToPlayingBufferingShow(); } } } } @Override protected void hideAllWidget() { setViewShowState(mBottomContainer, INVISIBLE); setViewShowState(mTopContainer, INVISIBLE); setViewShowState(mBottomProgressBar, VISIBLE); setViewShowState(mStartButton, INVISIBLE); } @Override protected void changeUiToNormal() { Debuger.printfLog("changeUiToNormal"); setViewShowState(mTopContainer, VISIBLE); setViewShowState(mBottomContainer, INVISIBLE); setViewShowState(mStartButton, VISIBLE); setViewShowState(mLoadingProgressBar, INVISIBLE); setViewShowState(mThumbImageViewLayout, VISIBLE); setViewShowState(mBottomProgressBar, INVISIBLE); setViewShowState(mLockScreen, (mIfCurrentIsFullscreen && mNeedLockFull) ? VISIBLE : GONE); updateStartImage(); if (mLoadingProgressBar instanceof ENDownloadView) { ((ENDownloadView) mLoadingProgressBar).reset(); } } @Override protected void changeUiToPreparingShow() { Debuger.printfLog("changeUiToPreparingShow"); setViewShowState(mTopContainer, VISIBLE); setViewShowState(mBottomContainer, VISIBLE); setViewShowState(mStartButton, INVISIBLE); setViewShowState(mLoadingProgressBar, VISIBLE); setViewShowState(mThumbImageViewLayout, INVISIBLE); setViewShowState(mBottomProgressBar, INVISIBLE); setViewShowState(mLockScreen, GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ENDownloadView enDownloadView = (ENDownloadView) mLoadingProgressBar; if (enDownloadView.getCurrentState() == ENDownloadView.STATE_PRE) { ((ENDownloadView) mLoadingProgressBar).start(); } } } @Override protected void changeUiToPlayingShow() { Debuger.printfLog("changeUiToPlayingShow"); setViewShowState(mTopContainer, VISIBLE); setViewShowState(mBottomContainer, VISIBLE); setViewShowState(mStartButton, VISIBLE); setViewShowState(mLoadingProgressBar, INVISIBLE); setViewShowState(mThumbImageViewLayout, INVISIBLE); setViewShowState(mBottomProgressBar, INVISIBLE); setViewShowState(mLockScreen, (mIfCurrentIsFullscreen && mNeedLockFull) ? VISIBLE : GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ((ENDownloadView) mLoadingProgressBar).reset(); } updateStartImage(); } @Override protected void changeUiToPauseShow() { Debuger.printfLog("changeUiToPauseShow"); setViewShowState(mTopContainer, VISIBLE); setViewShowState(mBottomContainer, VISIBLE); setViewShowState(mStartButton, VISIBLE); setViewShowState(mLoadingProgressBar, INVISIBLE); setViewShowState(mThumbImageViewLayout, INVISIBLE); setViewShowState(mBottomProgressBar, INVISIBLE); setViewShowState(mLockScreen, (mIfCurrentIsFullscreen && mNeedLockFull) ? VISIBLE : GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ((ENDownloadView) mLoadingProgressBar).reset(); } updateStartImage(); updatePauseCover(); } @Override protected void changeUiToPlayingBufferingShow() { Debuger.printfLog("changeUiToPlayingBufferingShow"); setViewShowState(mTopContainer, VISIBLE); setViewShowState(mBottomContainer, VISIBLE); setViewShowState(mStartButton, INVISIBLE); setViewShowState(mLoadingProgressBar, VISIBLE); setViewShowState(mThumbImageViewLayout, INVISIBLE); setViewShowState(mBottomProgressBar, INVISIBLE); setViewShowState(mLockScreen, GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ENDownloadView enDownloadView = (ENDownloadView) mLoadingProgressBar; if (enDownloadView.getCurrentState() == ENDownloadView.STATE_PRE) { ((ENDownloadView) mLoadingProgressBar).start(); } } } @Override protected void changeUiToCompleteShow() { Debuger.printfLog("changeUiToCompleteShow"); setViewShowState(mTopContainer, VISIBLE); setViewShowState(mBottomContainer, VISIBLE); setViewShowState(mStartButton, VISIBLE); setViewShowState(mLoadingProgressBar, INVISIBLE); setViewShowState(mThumbImageViewLayout, VISIBLE); setViewShowState(mBottomProgressBar, INVISIBLE); setViewShowState(mLockScreen, (mIfCurrentIsFullscreen && mNeedLockFull) ? VISIBLE : GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ((ENDownloadView) mLoadingProgressBar).reset(); } updateStartImage(); } @Override protected void changeUiToError() { Debuger.printfLog("changeUiToError"); setViewShowState(mTopContainer, INVISIBLE); setViewShowState(mBottomContainer, INVISIBLE); setViewShowState(mStartButton, VISIBLE); setViewShowState(mLoadingProgressBar, INVISIBLE); setViewShowState(mThumbImageViewLayout, INVISIBLE); setViewShowState(mBottomProgressBar, INVISIBLE); setViewShowState(mLockScreen, (mIfCurrentIsFullscreen && mNeedLockFull) ? VISIBLE : GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ((ENDownloadView) mLoadingProgressBar).reset(); } updateStartImage(); } protected void changeUiToPrepareingClear() { Debuger.printfLog("changeUiToPrepareingClear"); setViewShowState(mTopContainer, INVISIBLE); setViewShowState(mBottomContainer, INVISIBLE); setViewShowState(mStartButton, INVISIBLE); setViewShowState(mLoadingProgressBar, INVISIBLE); setViewShowState(mThumbImageViewLayout, INVISIBLE); setViewShowState(mBottomProgressBar, INVISIBLE); setViewShowState(mLockScreen, GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ((ENDownloadView) mLoadingProgressBar).reset(); } } protected void changeUiToPlayingClear() { Debuger.printfLog("changeUiToPlayingClear"); changeUiToClear(); setViewShowState(mBottomProgressBar, VISIBLE); } protected void changeUiToPauseClear() { Debuger.printfLog("changeUiToPauseClear"); changeUiToClear(); setViewShowState(mBottomProgressBar, VISIBLE); updatePauseCover(); } protected void changeUiToPlayingBufferingClear() { Debuger.printfLog("changeUiToPlayingBufferingClear"); setViewShowState(mTopContainer, INVISIBLE); setViewShowState(mBottomContainer, INVISIBLE); setViewShowState(mStartButton, INVISIBLE); setViewShowState(mLoadingProgressBar, VISIBLE); setViewShowState(mThumbImageViewLayout, INVISIBLE); setViewShowState(mBottomProgressBar, VISIBLE); setViewShowState(mLockScreen, GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ENDownloadView enDownloadView = (ENDownloadView) mLoadingProgressBar; if (enDownloadView.getCurrentState() == ENDownloadView.STATE_PRE) { ((ENDownloadView) mLoadingProgressBar).start(); } } updateStartImage(); } protected void changeUiToClear() { Debuger.printfLog("changeUiToClear"); setViewShowState(mTopContainer, INVISIBLE); setViewShowState(mBottomContainer, INVISIBLE); setViewShowState(mStartButton, INVISIBLE); setViewShowState(mLoadingProgressBar, INVISIBLE); setViewShowState(mThumbImageViewLayout, INVISIBLE); setViewShowState(mBottomProgressBar, INVISIBLE); setViewShowState(mLockScreen, GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ((ENDownloadView) mLoadingProgressBar).reset(); } } protected void changeUiToCompleteClear() { Debuger.printfLog("changeUiToCompleteClear"); setViewShowState(mTopContainer, INVISIBLE); setViewShowState(mBottomContainer, INVISIBLE); setViewShowState(mStartButton, VISIBLE); setViewShowState(mLoadingProgressBar, INVISIBLE); setViewShowState(mThumbImageViewLayout, VISIBLE); setViewShowState(mBottomProgressBar, VISIBLE); setViewShowState(mLockScreen, (mIfCurrentIsFullscreen && mNeedLockFull) ? VISIBLE : GONE); if (mLoadingProgressBar instanceof ENDownloadView) { ((ENDownloadView) mLoadingProgressBar).reset(); } updateStartImage(); } /** * 定义开始按键显示 */ protected void updateStartImage() { if (mStartButton instanceof VideoControlView) { VideoControlView enPlayView = (VideoControlView) mStartButton; if (mCurrentState == CURRENT_STATE_PLAYING) { enPlayView.play(); } else if (mCurrentState == CURRENT_STATE_ERROR) { enPlayView.pause(); } else { enPlayView.pause(); } } else if (mStartButton instanceof ImageView) { ImageView imageView = (ImageView) mStartButton; if (mCurrentState == CURRENT_STATE_PLAYING) { imageView.setImageResource(R.drawable.video_click_pause_selector); } else if (mCurrentState == CURRENT_STATE_ERROR) { imageView.setImageResource(R.drawable.video_click_error_selector); } else { imageView.setImageResource(R.drawable.video_click_play_selector); } } } /** * 全屏的UI逻辑 */ private void 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); } } /** * 底部进度条-弹出的 */ public void setBottomShowProgressBarDrawable(Drawable drawable, Drawable thumb) { mBottomShowProgressDrawable = drawable; mBottomShowProgressThumbDrawable = thumb; if (mProgressBar != null) { mProgressBar.setProgressDrawable(drawable); mProgressBar.setThumb(thumb); } } /** * 底部进度条-非弹出 */ public void setBottomProgressBarDrawable(Drawable drawable) { mBottomProgressDrawable = drawable; if (mBottomProgressBar != null) { mBottomProgressBar.setProgressDrawable(drawable); } } /** * 声音进度条 */ public void setDialogVolumeProgressBar(Drawable drawable) { mVolumeProgressDrawable = drawable; } /** * 中间进度条 */ public void setDialogProgressBar(Drawable drawable) { mDialogProgressBarDrawable = drawable; } /** * 中间进度条字体颜色 */ public void setDialogProgressColor(int highLightColor, int normalColor) { mDialogProgressHighLightColor = highLightColor; mDialogProgressNormalColor = normalColor; } public void setStandardVideoAllCallBack(StandardVideoAllCallBack standardVideoAllCallBack) { this.mStandardVideoAllCallBack = standardVideoAllCallBack; setVideoAllCallBack(standardVideoAllCallBack); } }