package fm.jiecao.jcvideoplayer_lib;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.SurfaceTexture;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
/**
* Manage MediaPlayer
* Created by Nathen
* On 2016/04/10 15:45
*/
public abstract class JCVideoPlayer extends FrameLayout implements View.OnClickListener, View.OnTouchListener, SeekBar.OnSeekBarChangeListener, JCMediaManager.JCMediaPlayerListener, TextureView.SurfaceTextureListener {
public static final String TAG = "JieCaoVideoPlayer";
protected int mCurrentState = -1;//-1相当于null
protected static final int CURRENT_STATE_NORMAL = 0;
protected static final int CURRENT_STATE_PREPAREING = 1;
protected static final int CURRENT_STATE_PLAYING = 2;
protected static final int CURRENT_STATE_PLAYING_BUFFERING_START = 3;
protected static final int CURRENT_STATE_PAUSE = 5;
protected static final int CURRENT_STATE_AUTO_COMPLETE = 6;
protected static final int CURRENT_STATE_ERROR = 7;
protected static int BACKUP_PLAYING_BUFFERING_STATE = -1;
protected boolean mTouchingProgressBar = false;
protected boolean mIfCurrentIsFullscreen = false;
protected boolean mIfFullscreenIsDirectly = false;//mIfCurrentIsFullscreen should be true first
protected static boolean IF_FULLSCREEN_FROM_NORMAL = false;//to prevent infinite looping
public static boolean IF_RELEASE_WHEN_ON_PAUSE = true;
protected static long CLICK_QUIT_FULLSCREEN_TIME = 0;
public static final int FULL_SCREEN_NORMAL_DELAY = 2000;
public ImageView startButton;
public SeekBar progressBar;
public ImageView fullscreenButton;
public TextView currentTimeTextView, totalTimeTextView;
public ViewGroup textureViewContainer;
public ViewGroup topContainer, bottomContainer;
public JCResizeTextureView textureView;
public Surface mSurface;
protected String mUrl;
protected Object[] mObjects;
protected Map<String, String> mMapHeadData = new HashMap<>();
protected boolean mLooping = false;
protected static Timer UPDATE_PROGRESS_TIMER;
protected ProgressTimerTask mProgressTimerTask;
protected static JCBuriedPoint JC_BURIED_POINT;
protected int mScreenWidth;
protected int mScreenHeight;
protected AudioManager mAudioManager;
protected int mThreshold = 80;
protected float mDownX;
protected float mDownY;
protected boolean mChangeVolume = false;
protected boolean mChangePosition = false;
protected int mDownPosition;
protected int mGestureDownVolume;
protected int mSeekTimePosition;//change postion when finger up
public static boolean WIFI_TIP_DIALOG_SHOWED = false;
public JCVideoPlayer(Context context) {
super(context);
init(context);
}
public JCVideoPlayer(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
protected void init(Context context) {
View.inflate(context, getLayoutId(), this);
startButton = (ImageView) findViewById(R.id.start);
fullscreenButton = (ImageView) findViewById(R.id.fullscreen);
progressBar = (SeekBar) findViewById(R.id.progress);
currentTimeTextView = (TextView) findViewById(R.id.current);
totalTimeTextView = (TextView) findViewById(R.id.total);
bottomContainer = (ViewGroup) findViewById(R.id.layout_bottom);
textureViewContainer = (RelativeLayout) findViewById(R.id.surface_container);
topContainer = (ViewGroup) findViewById(R.id.layout_top);
startButton.setOnClickListener(this);
fullscreenButton.setOnClickListener(this);
progressBar.setOnSeekBarChangeListener(this);
bottomContainer.setOnClickListener(this);
textureViewContainer.setOnClickListener(this);
progressBar.setOnTouchListener(this);
textureViewContainer.setOnTouchListener(this);
mScreenWidth = getContext().getResources().getDisplayMetrics().widthPixels;
mScreenHeight = getContext().getResources().getDisplayMetrics().heightPixels;
mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
}
public abstract int getLayoutId();
protected static void setJcBuriedPoint(JCBuriedPoint jcBuriedPoint) {
JC_BURIED_POINT = jcBuriedPoint;
}
public boolean setUp(String url, Object... objects) {
if (JCMediaManager.instance().listener == this &&
(System.currentTimeMillis() - CLICK_QUIT_FULLSCREEN_TIME) < FULL_SCREEN_NORMAL_DELAY)
return false;
mCurrentState = CURRENT_STATE_NORMAL;
this.mUrl = url;
this.mObjects = objects;
setStateAndUi(CURRENT_STATE_NORMAL);
return true;
}
public boolean setUp(String url, Map<String, String> mapHeadData, Object... objects) {
if (setUp(url, objects)) {
this.mMapHeadData.clear();
this.mMapHeadData.putAll(mapHeadData);
return true;
}
return false;
}
public void setLoop(boolean looping) {
this.mLooping = looping;
}
//set ui
protected void setStateAndUi(int state) {
mCurrentState = state;
switch (mCurrentState) {
case CURRENT_STATE_NORMAL:
if (JCMediaManager.instance().listener == this) {
cancelProgressTimer();
JCMediaManager.instance().releaseMediaPlayer();
}
break;
case CURRENT_STATE_PREPAREING:
resetProgressAndTime();
break;
case CURRENT_STATE_PLAYING:
startProgressTimer();
break;
case CURRENT_STATE_PAUSE:
startProgressTimer();
break;
case CURRENT_STATE_ERROR:
if (JCMediaManager.instance().listener == this) {
JCMediaManager.instance().releaseMediaPlayer();
}
break;
case CURRENT_STATE_AUTO_COMPLETE:
cancelProgressTimer();
progressBar.setProgress(100);
currentTimeTextView.setText(totalTimeTextView.getText());
break;
}
}
@Override
public void onClick(View v) {
int i = v.getId();
if (i == R.id.start) {
Log.i(TAG, "onClick start [" + this.hashCode() + "] ");
if (TextUtils.isEmpty(mUrl)) {
Toast.makeText(getContext(), getResources().getString(R.string.no_url), Toast.LENGTH_SHORT).show();
return;
}
if (mCurrentState == CURRENT_STATE_NORMAL || mCurrentState == CURRENT_STATE_ERROR) {
if (!JCUtils.isWifiConnected(getContext()) && !WIFI_TIP_DIALOG_SHOWED) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
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();
startButtonLogic();
WIFI_TIP_DIALOG_SHOWED = true;
}
});
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();
return;
}
startButtonLogic();
} else if (mCurrentState == CURRENT_STATE_PLAYING) {
Log.d(TAG, "pauseVideo [" + this.hashCode() + "] ");
JCMediaManager.instance().mediaPlayer.pause();
setStateAndUi(CURRENT_STATE_PAUSE);
if (JC_BURIED_POINT != null && JCMediaManager.instance().listener == this) {
if (mIfCurrentIsFullscreen) {
JC_BURIED_POINT.onClickStopFullscreen(mUrl, mObjects);
} else {
JC_BURIED_POINT.onClickStop(mUrl, mObjects);
}
}
} else if (mCurrentState == CURRENT_STATE_PAUSE) {
if (JC_BURIED_POINT != null && JCMediaManager.instance().listener == this) {
if (mIfCurrentIsFullscreen) {
JC_BURIED_POINT.onClickResumeFullscreen(mUrl, mObjects);
} else {
JC_BURIED_POINT.onClickResume(mUrl, mObjects);
}
}
JCMediaManager.instance().mediaPlayer.start();
setStateAndUi(CURRENT_STATE_PLAYING);
} else if (mCurrentState == CURRENT_STATE_AUTO_COMPLETE) {
startButtonLogic();
}
} else if (i == R.id.fullscreen) {
Log.i(TAG, "onClick fullscreen [" + this.hashCode() + "] ");
if (mCurrentState == CURRENT_STATE_AUTO_COMPLETE) return;
if (mIfCurrentIsFullscreen) {
//quit fullscreen
backFullscreen();
} else {
Log.d(TAG, "toFullscreenActivity [" + this.hashCode() + "] ");
if (JC_BURIED_POINT != null && JCMediaManager.instance().listener == this) {
JC_BURIED_POINT.onEnterFullscreen(mUrl, mObjects);
}
//to fullscreen
JCMediaManager.instance().setDisplay(null);
JCMediaManager.instance().lastListener = this;
JCMediaManager.instance().listener = null;
IF_FULLSCREEN_FROM_NORMAL = true;
IF_RELEASE_WHEN_ON_PAUSE = false;
JCFullScreenActivity.startActivityFromNormal(getContext(), mCurrentState, mUrl, JCVideoPlayer.this.getClass(), this.mObjects);
}
} else if (i == R.id.surface_container && mCurrentState == CURRENT_STATE_ERROR) {
Log.i(TAG, "onClick surfaceContainer State=Error [" + this.hashCode() + "] ");
if (JC_BURIED_POINT != null) {
JC_BURIED_POINT.onClickStartError(mUrl, mObjects);
}
prepareVideo();
}
}
private void startButtonLogic() {
if (JC_BURIED_POINT != null && mCurrentState == CURRENT_STATE_NORMAL) {
JC_BURIED_POINT.onClickStartIcon(mUrl, mObjects);
} else if (JC_BURIED_POINT != null) {
JC_BURIED_POINT.onClickStartError(mUrl, mObjects);
}
prepareVideo();
}
protected void prepareVideo() {
Log.d(TAG, "prepareVideo [" + this.hashCode() + "] ");
if (JCMediaManager.instance().listener != null) {
JCMediaManager.instance().listener.onCompletion();
}
JCMediaManager.instance().listener = this;
addTextureView();
AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
((Activity) getContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
JCMediaManager.instance().prepare(mUrl, mMapHeadData, mLooping);
setStateAndUi(CURRENT_STATE_PREPAREING);
}
private static AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
break;
case AudioManager.AUDIOFOCUS_LOSS:
releaseAllVideos();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (JCMediaManager.instance().mediaPlayer.isPlaying()) {
JCMediaManager.instance().mediaPlayer.pause();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
break;
}
}
};
protected void addTextureView() {
Log.d(TAG, "addTextureView [" + this.hashCode() + "] ");
if (textureViewContainer.getChildCount() > 0) {
textureViewContainer.removeAllViews();
}
textureView = null;
textureView = new JCResizeTextureView(getContext());
textureView.setSurfaceTextureListener(this);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
textureViewContainer.addView(textureView, layoutParams);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Log.i(TAG, "onSurfaceTextureAvailable [" + this.hashCode() + "] ");
mSurface = new Surface(surface);
JCMediaManager.instance().setDisplay(mSurface);
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
surface.release();
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
int id = v.getId();
if (id == R.id.surface_container) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i(TAG, "onTouch surfaceContainer actionDown [" + this.hashCode() + "] ");
mTouchingProgressBar = true;
mDownX = x;
mDownY = y;
mChangeVolume = false;
mChangePosition = false;
/////////////////////
break;
case MotionEvent.ACTION_MOVE:
Log.i(TAG, "onTouch surfaceContainer actionMove [" + this.hashCode() + "] ");
float deltaX = x - mDownX;
float deltaY = y - mDownY;
float absDeltaX = Math.abs(deltaX);
float absDeltaY = Math.abs(deltaY);
if (mIfCurrentIsFullscreen) {
if (!mChangePosition && !mChangeVolume) {
if (absDeltaX > mThreshold || absDeltaY > mThreshold) {
cancelProgressTimer();
if (absDeltaX >= mThreshold) {
mChangePosition = true;
mDownPosition = getCurrentPositionWhenPlaying();
if (JC_BURIED_POINT != null && JCMediaManager.instance().listener == this) {
JC_BURIED_POINT.onTouchScreenSeekPosition(mUrl, mObjects);
}
} else {
mChangeVolume = true;
mGestureDownVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
if (JC_BURIED_POINT != null && JCMediaManager.instance().listener == this) {
JC_BURIED_POINT.onTouchScreenSeekVolume(mUrl, mObjects);
}
}
}
}
}
if (mChangePosition) {
int totalTimeDuration = getDuration();
mSeekTimePosition = (int) (mDownPosition + deltaX * totalTimeDuration / mScreenWidth);
if (mSeekTimePosition > totalTimeDuration)
mSeekTimePosition = totalTimeDuration;
String seekTime = JCUtils.stringForTime(mSeekTimePosition);
String totalTime = JCUtils.stringForTime(totalTimeDuration);
showProgressDialog(deltaX, seekTime, mSeekTimePosition, totalTime, totalTimeDuration);
}
if (mChangeVolume) {
deltaY = -deltaY;
int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int deltaV = (int) (max * deltaY * 3 / mScreenHeight);
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mGestureDownVolume + deltaV, 0);
int volumePercent = (int) (mGestureDownVolume * 100 / max + deltaY * 3 * 100 / mScreenHeight);
showVolumDialog(-deltaY, volumePercent);
}
break;
case MotionEvent.ACTION_UP:
Log.i(TAG, "onTouch surfaceContainer actionUp [" + this.hashCode() + "] ");
mTouchingProgressBar = false;
dismissProgressDialog();
dismissVolumDialog();
if (mChangePosition) {
JCMediaManager.instance().mediaPlayer.seekTo(mSeekTimePosition);
int duration = getDuration();
int progress = mSeekTimePosition * 100 / (duration == 0 ? 1 : duration);
progressBar.setProgress(progress);
}
/////////////////////
startProgressTimer();
if (JC_BURIED_POINT != null && JCMediaManager.instance().listener == this) {
if (mIfCurrentIsFullscreen) {
JC_BURIED_POINT.onClickSeekbarFullscreen(mUrl, mObjects);
} else {
JC_BURIED_POINT.onClickSeekbar(mUrl, mObjects);
}
}
break;
}
} else if (id == R.id.progress) {//if I am seeking bar,no mater whoever can not intercept my event
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i(TAG, "onTouch bottomProgress actionUp [" + this.hashCode() + "] ");
cancelProgressTimer();
ViewParent vpdown = getParent();
while (vpdown != null) {
vpdown.requestDisallowInterceptTouchEvent(true);
vpdown = vpdown.getParent();
}
break;
case MotionEvent.ACTION_UP:
Log.i(TAG, "onTouch bottomProgress actionDown [" + this.hashCode() + "] ");
startProgressTimer();
ViewParent vpup = getParent();
while (vpup != null) {
vpup.requestDisallowInterceptTouchEvent(false);
vpup = vpup.getParent();
}
break;
}
}
return false;
}
protected void showProgressDialog(float deltaX,
String seekTime, int seekTimePosition,
String totalTime, int totalTimeDuration) {
}
protected void dismissProgressDialog() {
}
protected void showVolumDialog(float deltaY, int volumePercent) {
}
protected void dismissVolumDialog() {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (mCurrentState != CURRENT_STATE_PLAYING &&
mCurrentState != CURRENT_STATE_PAUSE) return;
if (fromUser) {
int time = progress * getDuration() / 100;
JCMediaManager.instance().mediaPlayer.seekTo(time);
Log.i(TAG, "seekTo " + time + " [" + this.hashCode() + "] ");
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onPrepared() {
if (mCurrentState != CURRENT_STATE_PREPAREING) return;
JCMediaManager.instance().mediaPlayer.start();
startProgressTimer();
setStateAndUi(CURRENT_STATE_PLAYING);
}
@Override
public void onAutoCompletion() {
//make me normal first
if (JC_BURIED_POINT != null && JCMediaManager.instance().listener == this) {
if (mIfCurrentIsFullscreen) {
JC_BURIED_POINT.onAutoCompleteFullscreen(mUrl, mObjects);
} else {
JC_BURIED_POINT.onAutoComplete(mUrl, mObjects);
}
}
setStateAndUi(CURRENT_STATE_AUTO_COMPLETE);
if (textureViewContainer.getChildCount() > 0) {
textureViewContainer.removeAllViews();
}
finishFullscreenActivity();
if (IF_FULLSCREEN_FROM_NORMAL) {//如果在进入全屏后播放完就初始化自己非全屏的控件
IF_FULLSCREEN_FROM_NORMAL = false;
JCMediaManager.instance().lastListener.onAutoCompletion();
}
JCMediaManager.instance().lastListener = null;
AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mAudioManager.abandonAudioFocus(onAudioFocusChangeListener);
((Activity) getContext()).getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override
public void onCompletion() {
//make me normal first
setStateAndUi(CURRENT_STATE_NORMAL);
if (textureViewContainer.getChildCount() > 0) {
textureViewContainer.removeAllViews();
}
//if fullscreen finish activity what ever the activity is directly or click fullscreen
finishFullscreenActivity();
if (IF_FULLSCREEN_FROM_NORMAL) {//如果在进入全屏后播放完就初始化自己非全屏的控件
IF_FULLSCREEN_FROM_NORMAL = false;
JCMediaManager.instance().lastListener.onCompletion();
}
JCMediaManager.instance().listener = null;
JCMediaManager.instance().lastListener = null;
JCMediaManager.instance().currentVideoWidth = 0;
JCMediaManager.instance().currentVideoHeight = 0;
AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mAudioManager.abandonAudioFocus(onAudioFocusChangeListener);
((Activity) getContext()).getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override
public void onBufferingUpdate(int percent) {
if (mCurrentState != CURRENT_STATE_NORMAL && mCurrentState != CURRENT_STATE_PREPAREING) {
setTextAndProgress(percent);
}
}
@Override
public void onSeekComplete() {
}
@Override
public void onError(int what, int extra) {
Log.e(TAG, "onError " + what + " - " + extra + " [" + this.hashCode() + "] ");
if (what != 38 && what != -38) {
setStateAndUi(CURRENT_STATE_ERROR);
}
}
@Override
public void onInfo(int what, int extra) {
Log.d(TAG, "onInfo what - " + what + " extra - " + extra);
if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {
BACKUP_PLAYING_BUFFERING_STATE = mCurrentState;
setStateAndUi(CURRENT_STATE_PLAYING_BUFFERING_START);
Log.d(TAG, "MEDIA_INFO_BUFFERING_START");
} else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
if (BACKUP_PLAYING_BUFFERING_STATE != -1) {
setStateAndUi(BACKUP_PLAYING_BUFFERING_STATE);
BACKUP_PLAYING_BUFFERING_STATE = -1;
}
Log.d(TAG, "MEDIA_INFO_BUFFERING_END");
}
}
@Override
public void onVideoSizeChanged() {
int mVideoWidth = JCMediaManager.instance().currentVideoWidth;
int mVideoHeight = JCMediaManager.instance().currentVideoHeight;
if (mVideoWidth != 0 && mVideoHeight != 0) {
textureView.requestLayout();
}
}
@Override
public void onBackFullscreen() {
mCurrentState = JCMediaManager.instance().lastState;
setStateAndUi(mCurrentState);
addTextureView();
}
protected void startProgressTimer() {
cancelProgressTimer();
UPDATE_PROGRESS_TIMER = new Timer();
mProgressTimerTask = new ProgressTimerTask();
UPDATE_PROGRESS_TIMER.schedule(mProgressTimerTask, 0, 300);
}
protected void cancelProgressTimer() {
if (UPDATE_PROGRESS_TIMER != null) {
UPDATE_PROGRESS_TIMER.cancel();
}
if (mProgressTimerTask != null) {
mProgressTimerTask.cancel();
}
}
protected class ProgressTimerTask extends TimerTask {
@Override
public void run() {
if (mCurrentState == CURRENT_STATE_PLAYING || mCurrentState == CURRENT_STATE_PAUSE) {
if (getContext() != null && getContext() instanceof Activity) {
((Activity) getContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
setTextAndProgress(0);
}
});
}
}
}
}
protected int getCurrentPositionWhenPlaying() {
int position = 0;
if (mCurrentState == CURRENT_STATE_PLAYING || mCurrentState == CURRENT_STATE_PAUSE) {
try {
position = JCMediaManager.instance().mediaPlayer.getCurrentPosition();
} catch (IllegalStateException e) {
e.printStackTrace();
return position;
}
}
return position;
}
protected int getDuration() {
int duration = 0;
try {
duration = JCMediaManager.instance().mediaPlayer.getDuration();
} catch (IllegalStateException e) {
e.printStackTrace();
return duration;
}
return duration;
}
protected void setTextAndProgress(int secProgress) {
int position = getCurrentPositionWhenPlaying();
int duration = getDuration();
// if duration == 0 (e.g. in HLS streams) avoids ArithmeticException
int progress = position * 100 / (duration == 0 ? 1 : duration);
setProgressAndTime(progress, secProgress, position, duration);
}
protected void setProgressAndTime(int progress, int secProgress, int currentTime, int totalTime) {
if (!mTouchingProgressBar) {
if (progress != 0) progressBar.setProgress(progress);
}
if (secProgress != 0) progressBar.setSecondaryProgress(secProgress);
currentTimeTextView.setText(JCUtils.stringForTime(currentTime));
totalTimeTextView.setText(JCUtils.stringForTime(totalTime));
}
protected void resetProgressAndTime() {
progressBar.setProgress(0);
progressBar.setSecondaryProgress(0);
currentTimeTextView.setText(JCUtils.stringForTime(0));
totalTimeTextView.setText(JCUtils.stringForTime(0));
}
protected void quitFullScreenGoToNormal() {
Log.d(TAG, "quitFullScreenGoToNormal [" + this.hashCode() + "] ");
if (JC_BURIED_POINT != null && JCMediaManager.instance().listener == this) {
JC_BURIED_POINT.onQuitFullscreen(mUrl, mObjects);
}
JCMediaManager.instance().setDisplay(null);
JCMediaManager.instance().listener = JCMediaManager.instance().lastListener;
JCMediaManager.instance().lastListener = null;
JCMediaManager.instance().lastState = mCurrentState;//save state
JCMediaManager.instance().listener.onBackFullscreen();
if (mCurrentState == CURRENT_STATE_PAUSE) {
JCMediaManager.instance().mediaPlayer.seekTo(JCMediaManager.instance().mediaPlayer.getCurrentPosition());
}
finishFullscreenActivity();
}
protected void finishFullscreenActivity() {
if (getContext() instanceof JCFullScreenActivity) {
Log.d(TAG, "finishFullscreenActivity [" + this.hashCode() + "] ");
((JCFullScreenActivity) getContext()).finish();
}
}
public void backFullscreen() {
Log.d(TAG, "quitFullscreen [" + this.hashCode() + "] ");
IF_FULLSCREEN_FROM_NORMAL = false;
if (mIfFullscreenIsDirectly) {
JCMediaManager.instance().mediaPlayer.stop();
finishFullscreenActivity();
} else {
CLICK_QUIT_FULLSCREEN_TIME = System.currentTimeMillis();
IF_RELEASE_WHEN_ON_PAUSE = false;
quitFullScreenGoToNormal();
}
}
public static void releaseAllVideos() {
if (IF_RELEASE_WHEN_ON_PAUSE) {
Log.d(TAG, "releaseAllVideos");
if (JCMediaManager.instance().listener != null) {
JCMediaManager.instance().listener.onCompletion();
}
JCMediaManager.instance().releaseMediaPlayer();
} else {
IF_RELEASE_WHEN_ON_PAUSE = true;
}
}
/**
* if I am playing release me
*/
public void release() {
if (JCMediaManager.instance().listener == this &&
// mCurrentState != CURRENT_STATE_NORMAL &&
(System.currentTimeMillis() - CLICK_QUIT_FULLSCREEN_TIME) > FULL_SCREEN_NORMAL_DELAY) {
Log.d(TAG, "release [" + this.hashCode() + "]");
releaseAllVideos();
}
}
}