package com.android.play;
import android.app.ActionBar;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.TextView;
import com.android.adapter.MusicListAdapter;
import com.android.aidl.IMediaplayInterface;
import com.android.entity.Constant;
public class MusicListActivity extends ActionBarActivity implements View.OnClickListener,AdapterView.OnItemClickListener,SeekBar.OnSeekBarChangeListener{
private String TAG = Constant.TAG;
private ListView mMusicListView;
private ImageButton mPlayButton;
private ImageButton mNextButton;
private TextView mSongName;
private ImageView mSongImage;
private SeekBar mSeekBar;
private MusicListAdapter mAdapter;
private View mLayoutTools;
private IMediaplayInterface IMediaplay;
private int position = 0;
private int progress = 0;
private String path;
private boolean isRun = true;
private boolean isFirst = false;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.i(TAG,"=====ServiceConnected===");
IMediaplay = IMediaplayInterface.Stub.asInterface(iBinder);
try {
IMediaplay.preparePlay(Constant.musicList.get(position).getPath());
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
};
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if("com.android.media.prepare".equals(action)){
try {
int time = IMediaplay.getDuration();
mSeekBar.setMax(time);
mSongName.setText(Constant.musicList.get(position).getmName());
Log.i(TAG, "=====prepare ==isFirst="+isFirst);
if(isFirst) {
mPlayButton.setBackgroundResource(R.drawable.start_button_video);
}else{
mPlayButton.setBackgroundResource(R.drawable.pause_button_video);
}
if (!isFirst) {
IMediaplay.start();
}else{
isFirst = false;
}
handler.sendEmptyMessage(0x01);
} catch (RemoteException e) {
e.printStackTrace();
}
}else if("com.android.media.completion".equals(action)){
if(isFirst){
isFirst = false;
}
mSeekBar.setProgress(0);
mPlayButton.setBackgroundResource(R.drawable.pause_button_video);
position++;
if(position <= Constant.musicList.size()-1){
path= Constant.musicList.get(position).getPath();
try {
IMediaplay.preparePlay(path);
} catch (RemoteException e) {
e.printStackTrace();
}
}else {
position = 0;
path= Constant.musicList.get(position).getPath();
try {
IMediaplay.preparePlay(path);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music_list);
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
Log.i(TAG,"====== 按====actionbar="+actionBar);
if(actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayOptions(android.support.v7.app.ActionBar.DISPLAY_HOME_AS_UP, android.support.v7.app.ActionBar.DISPLAY_HOME_AS_UP);
}
isFirst = getIntent().getBooleanExtra("isFirst", true);
initView();
bindService();
IntentFilter filter = new IntentFilter();
filter.addAction("com.android.media.completion");
filter.addAction("com.android.media.prepare");
registerReceiver(receiver,filter);
mSongImage.setImageBitmap(Constant.toRoundCorner((BitmapFactory.decodeResource(getResources(), R.drawable.music_list_image)),2));
mAdapter = new MusicListAdapter(this);
mMusicListView.setAdapter(mAdapter);
}
private void initView(){
mMusicListView = (ListView) findViewById(R.id.music_listview);
mPlayButton = (ImageButton) findViewById(R.id.music_bt_play);
mNextButton = (ImageButton) findViewById(R.id.music_bt_next);
mSongImage = (ImageView) findViewById(R.id.imageview_music_bottom);
mSongName = (TextView) findViewById(R.id.textview_songname);
mSeekBar = (SeekBar) findViewById(R.id.seekbar_music_list);
mLayoutTools = findViewById(R.id.music_bottom_tools);
}
private void initListenView(){
mMusicListView.setOnItemClickListener(this);
mPlayButton.setOnClickListener(this);
mNextButton.setOnClickListener(this);
mSeekBar.setOnSeekBarChangeListener(this);
mLayoutTools.setOnClickListener(this);
}
private void bindService(){
Log.i(TAG,"====绑定 服务===");
Intent serviceIntent = new Intent();
serviceIntent.setComponent(new ComponentName("com.android.play","com.android.service.IMediaplayService"));
bindService(serviceIntent,connection, Context.BIND_AUTO_CREATE);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 当Action Bar的图标被单击时执行下面的finish
Log.i(TAG,"MusicListActivity :onOptionsItemSelectes");
try {
if (IMediaplay.isplay())
IMediaplay.pause();
} catch (RemoteException e) {
e.printStackTrace();
}
finish();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
initListenView();
Log.i(TAG,"MusicListActivity : onResume ");
SharedPreferences sp = getSharedPreferences("song", 0);
position = sp.getInt("position", 0);
mSongName.setText(Constant.musicList.get(position).getmName());
mMusicListView.setSelection(position);
Log.i(TAG,"===MusicListActiy==onCreate ==position="+position);
try {
if(IMediaplay != null) {
if (IMediaplay.isplay()) {
mPlayButton.setBackgroundResource(R.drawable.pause_button_video);
} else {
mPlayButton.setBackgroundResource(R.drawable.start_button_video);
}
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
Log.i(TAG,"MusicListActivity : onBackPressed");
try {
if(IMediaplay.isplay())
IMediaplay.pause();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, " MusicListActivity : onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
SharedPreferences sp = getSharedPreferences("song",0);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("position", position);
editor.apply();
Log.i(TAG, " MusicListActivity : onDestroy");
isRun = false;
handler.removeMessages(0x01);
try {
IMediaplay.stop();
} catch (RemoteException e) {
e.printStackTrace();
}
unbindService(connection);
unregisterReceiver(receiver);
}
@Override
public void onClick(View view) {
Log.i(TAG,"====music list activity==onclick==");
switch (view.getId()){
case R.id.music_bt_play:
Log.i(TAG,"====按播放===");
try {
handler.sendEmptyMessage(0x01);
if(IMediaplay.isplay()){
IMediaplay.pause();
isRun = false;
mPlayButton.setBackgroundResource(R.drawable.start_button_video);
}else{
Log.i(TAG,"======= 开始 =");
IMediaplay.start();
isRun = true;
mPlayButton.setBackgroundResource(R.drawable.pause_button_video);
}
} catch (RemoteException e) {
e.printStackTrace();
}
break;
case R.id.music_bt_next:
Log.i(TAG,"======按 下一首==");
position++;
if(position < Constant.musicList.size()){
path= Constant.musicList.get(position).getPath();
try {
IMediaplay.preparePlay(path);
} catch (RemoteException e) {
e.printStackTrace();
}
}else {
position = 0;
}
break;
case R.id.music_bottom_tools:
Log.i(TAG,"======按 地步====");
Intent mMainMusic = new Intent();
mMainMusic.setClass(this,MusicMainActivity.class);
mMainMusic.putExtra("postion", position);
//mMainMusic.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(mMainMusic, 1);
break;
default:
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i(TAG,"=========按=====onActivity Result ====");
if(data != null && requestCode== 1){
position = data.getIntExtra("position",0);
Log.i(TAG,"=========按=====onActivity Result ===="+position);
mSongName.setText(Constant.musicList.get(position).getmName());
isRun = true;
handler.sendEmptyMessage(0x01);
}
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Log.i(TAG,"===onItemClick===position="+position);
this.position = position;
isFirst = false;
path = Constant.musicList.get(position).getPath();
try {
IMediaplay.preparePlay(path);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
// Log.i(TAG,"===onProgressChanged====progress=="+progress);
this.progress = progress;
try {
if(b)
IMediaplay.seekTo(progress);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
Handler handler = new Handler(){
@Override
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0x01:
try {
// Log.i(TAG,"==============handler===isRun="+isRun+"======"+IMediaplay.isplay());
if(isRun && IMediaplay.isplay()){
if(mSeekBar.getProgress()<=mSeekBar.getMax()){
try {
mSeekBar.setProgress(IMediaplay.getCurrentPosition());
} catch (RemoteException e) {
e.printStackTrace();
}
}
handler.sendEmptyMessage(0x01);
}
} catch (RemoteException e) {
e.printStackTrace();
}
break;
default:
break;
}
}
};
}