/**
* @auth geniuseoe2012
* @blog http://blog.csdn.net/geniuseoe2012
* @date 2013-1-6
* @description nothing to say
*/
package com.talent.allshare;
import java.util.List;
import org.cybergarage.util.CommonLog;
import org.cybergarage.util.LogFactory;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import com.talent.allshare.network.Item;
import com.talent.allshare.network.ItemFactory;
import com.talent.allshare.player.MediaManager;
import com.talent.allshare.player.PlayBorcastFactory;
import com.talent.allshare.player.PlayState;
import com.talent.allshare.player.PlayerEngineListener;
import com.talent.allshare.player.VideoPlayerEngineImpl;
import com.talent.allshare.util.TalentTimeUtil;
import com.youplayer.player.R;
public class VideoPlayerActivity extends Activity implements OnClickListener,
SurfaceHolder.Callback{
private static final CommonLog log = LogFactory.createLog();
public static final String PLAY_INDEX = "player_index";
public ImageButton mBtnPlay;
public ImageButton mBtnPause;
public ImageButton mBtnPre;
public ImageButton mBtnNext;
public SeekBar mSeekBar;
public TextView mTVCurTime;
public TextView mTVTotalTime;
private TextView mTextViewContent;
private SurfaceView mSurfaceView;
private SurfaceHolder holder = null;
private PlayBorcastFactory mPlayBrocastMng;
private VideoPlayEngineListener mPlayEngineListener;
private SeekbarChangeListener mSeekbarChangeListener;
private VideoPlayerEngineImpl mPlayerEngineImpl;
private Item item;
private List<Item> mItemsList;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.video_player_layout);
initView();
initData(getIntent());
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
mPlayBrocastMng.register(mPlayEngineListener);
super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
mPlayBrocastMng.unregister();
super.onPause();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
mPlayerEngineImpl.exit();
MediaManager.getInstance().clearVideoList();
isDestory = true;
super.onDestroy();
}
private final static int REFRESH_CURPOS = 0x0001;
public void initView()
{
mTextViewContent = (TextView) findViewById(R.id.tv_content);
mSurfaceView = (SurfaceView) findViewById(R.id.surfaceView);
holder = mSurfaceView.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mBtnPlay = (ImageButton) findViewById(R.id.btn_play);
mBtnPause = (ImageButton) findViewById(R.id.btn_pause);
mBtnPre = (ImageButton) findViewById(R.id.btn_playpre);
mBtnNext = (ImageButton) findViewById(R.id.btn_playnext);
mBtnPlay.setOnClickListener(this);
mBtnPause.setOnClickListener(this);
mBtnPre.setOnClickListener(this);
mBtnNext.setOnClickListener(this);
mSeekBar = (SeekBar) findViewById(R.id.playback_seeker);
mTVCurTime = (TextView) findViewById(R.id.tv_curTime);
mTVTotalTime = (TextView) findViewById(R.id.tv_totalTime);
}
private boolean isDestory = false;
private int mCurIndex = 0;
public void initData(Intent intent){
int index = 0;
if (intent != null){
mCurIndex = intent.getIntExtra(PLAY_INDEX, 0);
item = ItemFactory.getItemFromIntent(intent);
setContent(item);
}
mPlayerEngineImpl = new VideoPlayerEngineImpl(this, holder);
mItemsList = MediaManager.getInstance().getVideoList();
mPlayBrocastMng = new PlayBorcastFactory(this);
mPlayEngineListener = new VideoPlayEngineListener();
mSeekbarChangeListener = new SeekbarChangeListener();
setSeekbarListener(mSeekbarChangeListener);
mHandler = new Handler()
{
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what)
{
case REFRESH_CURPOS:
onSendCurposBrocast();
if (!isDestory){
mHandler.sendEmptyMessageDelayed(REFRESH_CURPOS, 1000);
}
break;
}
}
};
mHandler.sendEmptyMessageDelayed(REFRESH_CURPOS, 1000);
mHandler.postDelayed(new PlayRunnable(mCurIndex), 500);
}
class PlayRunnable implements Runnable{
private int index = 0;
public PlayRunnable(int index){
this.index = index;
}
@Override
public void run() {
// TODO Auto-generated method stub
log.e("PlayRunnable runs");
mPlayerEngineImpl.openPlaylist(mItemsList, mCurIndex);
}
}
private void onSendCurposBrocast()
{
int playState = mPlayerEngineImpl.getPlayState();
switch(playState)
{
case PlayState.MPS_PLAYING:
{
PlayBorcastFactory.sendPlayState(this, mPlayerEngineImpl.getCurPosition());
}
break;
}
}
private void setContent(Item item){
if (item != null){
String content = "uri:" + item.getRes() + "\n";
content += item.getShowString();
mTextViewContent.setText(content);
}else{
mTextViewContent.setText("null");
}
}
public void play()
{
log.e("play");
mPlayerEngineImpl.replay();
}
public void pause()
{
mPlayerEngineImpl.pause();
}
public void playPre()
{
mPlayerEngineImpl.prev();
}
public void playNext()
{
mPlayerEngineImpl.next();
}
public void setPlayInfo(long curTime, Item musicInfo)
{
setContent(item);
item = musicInfo;
if (item == null)
{
return ;
}
// log.e("setPlayInfo --> data = \n" + musicInfo.getShowString());
String curTimeString = TalentTimeUtil.formateTime(curTime);
String songName = item.getTitle();
// log.e("curTimeString = " + curTimeString + "\n" +
// "totalTimeString = " + totalTimeString + "\n" +
// "songName = " + songName);
int duration = item.getDuration();
int rate = 0;
if (duration != 0)
{
rate = (int) ((float)curTime / duration * 100);
}
setSeekbarProgress(rate);
mTVCurTime.setText(curTimeString);
mTVTotalTime.setText(TalentTimeUtil.formateTime(duration));
}
public void setPlayInfo(int curTime, Item Info)
{
setContent(item);
item = Info;
if (item == null)
{
return ;
}
// log.e("setPlayInfo --> data = \n" + musicInfo.getShowString());
String curTimeString = TalentTimeUtil.formateTime(curTime);
int duration = item.getDuration();
String songName = item.getTitle();
// log.e("curTimeString = " + curTimeString + "\n" +
// "totalTimeString = " + totalTimeString + "\n" +
// "songName = " + songName);
setSeekbarProgress(curTime);
mTVCurTime.setText(curTimeString);
mTVTotalTime.setText(TalentTimeUtil.formateTime(duration));
}
public void setSeekbarProgress(int time)
{
if (!isSeekbarTouch)
{
mSeekBar.setProgress(time);
}
}
public void setSeekbarMax(Item item)
{
if (item != null){
int duration = item.getDuration();
if (duration != 0){
mSeekBar.setMax(duration);
}else{
mSeekBar.setMax(100);
}
log.e("setSeekbarMax = " + mSeekBar.getMax());
}
}
public void showPlay(boolean bShow)
{
if (bShow)
{
mBtnPlay.setVisibility(View.VISIBLE);
mBtnPause.setVisibility(View.INVISIBLE);
}else{
mBtnPlay.setVisibility(View.INVISIBLE);
mBtnPause.setVisibility(View.VISIBLE);
}
}
public void setSeekbarListener(SeekbarChangeListener listener)
{
mSeekBar.setOnSeekBarChangeListener(listener);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//log.e(" onClick v.getId() = " + v.getId());
switch(v.getId())
{
case R.id.btn_play:
play();
break;
case R.id.btn_pause:
pause();
break;
case R.id.btn_playpre:
playPre();
break;
case R.id.btn_playnext:
playNext();
break;
}
}
private class VideoPlayEngineListener implements PlayerEngineListener
{
@Override
public void onTrackPause(Item musicInfo) {
log.e("onTrackPause ");
setPlayInfo(mPlayerEngineImpl.getCurPosition(), musicInfo);
showPlay(true);
}
@Override
public void onTrackPlay(Item musicInfo) {
log.e("onTrackPlay ");
setSeekbarMax(musicInfo);
setPlayInfo(mPlayerEngineImpl.getCurPosition(), musicInfo);
showPlay(false);
}
@Override
public void onTrackStop(Item musicInfo) {
log.e("onTrackStop ");
setPlayInfo(0, musicInfo);
showPlay(true);
}
@Override
public void onTrackStreamError(Item musicInfo) {
log.e("onTrackStreamError ");
setPlayInfo(0, musicInfo);
showPlay(true);
}
@Override
public void onCurPosition(int curPos) {
setPlayInfo(curPos, item);
}
}
private boolean isSeekbarTouch = false;
private class SeekbarChangeListener implements OnSeekBarChangeListener
{
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
isSeekbarTouch = true;
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
isSeekbarTouch = false;
mPlayerEngineImpl.skipTo(seekBar.getProgress());
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
log.e("surfaceCreated...");
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
log.e("surfaceChanged width = " + width + ", height = " + height);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
log.e("surfaceDestroyed");
}
}