/** * @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.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.Button; import android.widget.ImageButton; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import com.talent.allshare.adapter.MusicPlayListAdapter; import com.talent.allshare.bean.PlaylistBean; import com.talent.allshare.network.Item; import com.talent.allshare.network.ItemFactory; import com.talent.allshare.player.MediaManager; import com.talent.allshare.player.MusicPlayerEngineImpl; import com.talent.allshare.player.PlayBorcastFactory; import com.talent.allshare.player.PlayState; import com.talent.allshare.player.PlayerEngineListener; import com.talent.allshare.softapplication.SoftApplication; import com.talent.allshare.util.TalentTimeUtil; import com.youplayer.player.R; public class MusicPlayerActivity extends Activity implements OnClickListener { 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 PlayBorcastFactory mPlayBrocastMng; private MusicPlayEngineListener mPlayEngineListener; private SeekbarChangeListener mSeekbarChangeListener; private MusicPlayerEngineImpl mPlayerEngineImpl; private Item item; private List<Item> mItemsList; private Handler mHandler; private TextView tv_content; private TextView tv_title; // add by f private PopupWindow popWindown; private View popView; private RelativeLayout relateLayout; private RelativeLayout root; private ImageButton mBtnPlaylist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.music_player_layout); initView(); initData(getIntent()); } @Override protected void onResume() { mPlayBrocastMng.register(mPlayEngineListener); super.onResume(); } @Override protected void onPause() { mPlayBrocastMng.unregister(); super.onPause(); } @Override protected void onDestroy() { mPlayerEngineImpl.exit(); MediaManager.getInstance().clearMusicList(); isDestory = true; super.onDestroy(); } private final static int REFRESH_CURPOS = 0x0001; public void initView() { mBtnPlaylist=(ImageButton) findViewById(R.id.btn_playlist); root= (RelativeLayout)findViewById(R.id.root_rl); mTextViewContent = (TextView) findViewById(R.id.tv_content); 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); mBtnPlaylist.setOnClickListener(this); // mBtnPlaylist.set mSeekBar = (SeekBar) findViewById(R.id.playback_seeker); mTVCurTime = (TextView) findViewById(R.id.tv_curTime); mTVTotalTime = (TextView) findViewById(R.id.tv_totalTime); tv_title = (TextView) findViewById(R.id.title); tv_content = (TextView) findViewById(R.id.content); } 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); } mItemsList = MediaManager.getInstance().getMusicList(); mPlayerEngineImpl = new MusicPlayerEngineImpl(this); if (item != null) { mPlayerEngineImpl.openPlaylist(mItemsList, mCurIndex); } mPlayBrocastMng = new PlayBorcastFactory(this); mPlayEngineListener = new MusicPlayEngineListener(); mSeekbarChangeListener = new SeekbarChangeListener(); setSeekbarListener(mSeekbarChangeListener); mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case REFRESH_CURPOS: onSendCurposBrocast(); if (!isDestory) { mHandler.sendEmptyMessageDelayed(REFRESH_CURPOS, 1000); } break; } } }; mHandler.sendEmptyMessageDelayed(REFRESH_CURPOS, 1000); } 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(); tv_title.setText(item.getTitle()); tv_content.setText( // "播放地址:"+item.getRes()+"\n"+ // "播放:"+item.getRes()+"\n" // "文件格式:" + item.getAlbum() + "\n" + "艺术家:" // + item.getArtist() + "\n" + "文件大小:" // + item.getSize() + "\n" + "播放地址:" + item.getRes() // + "\n""" "" ); mTextViewContent.setText(content); } else { mTextViewContent.setText("null"); } } public void play() { mPlayerEngineImpl.replay(); } public void pause() { mPlayerEngineImpl.pause(); } public void playPre() { mPlayerEngineImpl.prev(); } public void playNext() { mPlayerEngineImpl.next(); } @SuppressLint("NewApi") public void showplaylist(View parent) { if (popWindown == null) { LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); popView = layoutInflater.inflate(R.layout.music_play_list, null); ListView arraylist = (ListView) popView .findViewById(R.id.arraylist); arraylist.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { mPlayerEngineImpl.openPlayBeanlist(SoftApplication.getInstance().getMusicPlaylists(), arg2); // mItemsList = MediaManager.getInstance().setMusicList(null); mPlayerEngineImpl.stop(); mPlayerEngineImpl.prev(); mPlayerEngineImpl.next(); } }); // LmPlayerEngineImpl.getPlaylist(); List<PlaylistBean> lists = SoftApplication.getInstance().getMusicPlaylists(); // lists.add( new PlaylistBean("title","local","",null)); MusicPlayListAdapter musicPlayListAdapter = new MusicPlayListAdapter( MusicPlayerActivity.this, SoftApplication.getInstance() .getMusicPlaylists()); arraylist.setAdapter(musicPlayListAdapter); popWindown = new PopupWindow(popView, 200, 350); } popWindown.setFocusable(true); popWindown.setOutsideTouchable(true); popWindown.setBackgroundDrawable(new BitmapDrawable()); WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); // 显示的位置为:屏幕的宽度的一半-PopupWindow的高度的一半 int xPos = windowManager.getDefaultDisplay().getWidth() / 2; Log.i("coder", "xPos:" + xPos); popWindown.showAsDropDown(parent, xPos, 0); } 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); String totalTimeString = TalentTimeUtil.formateTime(item.getDuration()); String songName = item.getTitle(); // log.e("curTimeString = " + curTimeString + "\n" + // "totalTimeString = " + totalTimeString + "\n" + // "songName = " + songName); setSeekbarProgress(curTime); mTVCurTime.setText(curTimeString); mTVTotalTime.setText(totalTimeString); } 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) { 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; case R.id.btn_playlist: showplaylist(mSeekBar); } } private class MusicPlayEngineListener 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()); log.e("skipTo = " + seekBar.getProgress() + ", max = " + seekBar.getMax()); } } }