package soo.audio;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class AudioTest extends ListActivity {
    /** Called when the activity is first created. */
	private static final String PATH="/sdcard/";
	private List<String> list = new ArrayList<String>();
	private MediaPlayer mp = new MediaPlayer();
	private int cPosition = 0; //현재 음악 파일의 위치
	private TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        tv = (TextView)findViewById(R.id.textVeiw02);
        setAdapter();
        
    }
    
    private void setAdapter(){
    	File f = new File(PATH);
    	if(f.listFiles(new Filter()).length>0){
    		for(File fChild : f.listFiles(new Filter())){
    			list.add(fChild.getName());
    		}
    		ArrayAdapter<String> aa 
    			= new ArrayAdapter<String>(this, R.layout.item,list);
    		//setListAdapter(aa);
    		setListAdapter(aa);
    	}
    }
    
    //item을 클릭했을 때 발생하는 이벤트 헨딜링    
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    	cPosition = position;
    	play(PATH+list.get(position)); //sdcard/???.mp3
    }
    
    private void play(String songPath){
    	try{
    		mp.reset();
    		mp.setDataSource(songPath);
    		mp.prepare();
    		mp.start();
    		Toast.makeText(this,"PLAY : "+songPath,Toast.LENGTH_LONG).show();
    		tv.setText("PLAY : "+songPath);
    		
    		mp.setOnCompletionListener(new OnCompletionListener() {
				
				@Override
				public void onCompletion(MediaPlayer mp) {
					nextPlay();
				}
			}); //한곡이 끝날 을 때 발생하는 이벤트 (연속 재생시)
    	}catch(IOException ie){
    		Toast.makeText(this,ie.toString(),Toast.LENGTH_LONG).show();
    	}
    }
    
    private void nextPlay(){
    	++cPosition;
    	if(cPosition < list.size()){ //다음 곡이 있으면 
    		Toast.makeText(this, "다음곡 재생",Toast.LENGTH_SHORT).show();
    		play(PATH+list.get(cPosition));
    	}else{ //마지막 곡이 끝나면...
    		//처음곡으로 돌아 간다.
    		cPosition=0;
    		tv.setText("READY");
    	}
    }
}

class Filter implements FilenameFilter{

	@Override
	public boolean accept(File dir, String filename) {		
		return filename.endsWith(".mp3");
	}
	
}