Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- btnPlay = (ImageButton) findViewById(R.id.btnPlay);
- btnForward = (ImageButton) findViewById(R.id.btnForward);
- btnBackward = (ImageButton) findViewById(R.id.btnBackward);
- btnPlaylist = (ImageButton) findViewById(R.id.btnPlaylist);
- btnRepeat = (ImageButton) findViewById(R.id.btnRepeat);
- btnShuffle = (ImageButton) findViewById(R.id.btnShuffle);
- songProgressBar = (SeekBar) findViewById(R.id.songProgressBar);
- songTitleLabel = (TextView) findViewById(R.id.songTitle);
- songCurrentDurationLabel = (TextView) findViewById(R.id.songCurrentDurationLabel);
- songTotalDurationLabel = (TextView) findViewById(R.id.songTotalDurationLabel);
- // Mediaplayer
- mp = new MediaPlayer();
- songManager = new SongsManager();
- utils = new Utilities();
- // Listeners
- songProgressBar.setOnSeekBarChangeListener(this); // Important
- mp.setOnCompletionListener(this); // Important
- // Getting all songs list
- songsList = songManager.getPlayList();
- // By default play first song
- playSong(0);
- /**
- * Play button click event plays a song and changes button to pause
- * image pauses a song and changes button to play image
- * */
- btnPlay.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- // check for already playing
- if (mp.isPlaying()) {
- if (mp != null) {
- mp.pause();
- // Changing button image to play button
- btnPlay.setImageResource(R.drawable.btn_play);
- }
- } else {
- // Resume song
- if (mp != null) {
- mp.start();
- // Changing button image to pause button
- btnPlay.setImageResource(R.drawable.btn_pause);
- }
- }
- }
- });
- btnForward.setOnLongClickListener(new OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- // get current song position
- int currentPosition = mp.getCurrentPosition();
- // check if seekForward time is lesser than song duration
- if (currentPosition + seekForwardTime <= mp.getDuration()) {
- // forward song
- mp.seekTo(currentPosition + seekForwardTime);
- } else {
- // forward to end position
- mp.seekTo(mp.getDuration());
- }
- return false;
- }
- });
- /**
- * Forward button click event Forwards song specified seconds
- * */
- btnForward.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- // get current song position
- // check if next song is there or not
- if (currentSongIndex < (songsList.size() - 1)) {
- playSong(currentSongIndex + 1);
- currentSongIndex = currentSongIndex + 1;
- } else {
- // play first song
- playSong(0);
- currentSongIndex = 0;
- }
- }
- });
- btnBackward.setOnLongClickListener(new OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- int currentPosition = mp.getCurrentPosition();
- // check if seekBackward time is greater than 0 sec
- if (currentPosition - seekBackwardTime >= 0) {
- // forward song
- mp.seekTo(currentPosition - seekBackwardTime);
- } else {
- // backward to starting position
- mp.seekTo(0);
- }
- return false;
- }
- });
- /**
- * Backward button click event Backward song to specified seconds
- * */
- btnBackward.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- if (currentSongIndex > 0) {
- playSong(currentSongIndex - 1);
- currentSongIndex = currentSongIndex - 1;
- } else {
- // play last song
- playSong(songsList.size() - 1);
- currentSongIndex = songsList.size() - 1;
- }
- }
- });
- /**
- * Button Click event for Repeat button Enables repeat flag to true
- * */
- btnRepeat.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- if (isRepeat) {
- isRepeat = false;
- Toast.makeText(getApplicationContext(), "Repeat is OFF",
- Toast.LENGTH_SHORT).show();
- btnRepeat.setImageResource(R.drawable.btn_repeat);
- } else {
- // make repeat to true
- isRepeat = true;
- Toast.makeText(getApplicationContext(), "Repeat is ON",
- Toast.LENGTH_SHORT).show();
- // make shuffle to false
- isShuffle = false;
- btnRepeat.setImageResource(R.drawable.btn_repeat_focused);
- btnShuffle.setImageResource(R.drawable.btn_shuffle);
- }
- }
- });
- /**
- * Button Click event for Shuffle button Enables shuffle flag to true
- * */
- btnShuffle.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- if (isShuffle) {
- isShuffle = false;
- Toast.makeText(getApplicationContext(), "Shuffle is OFF",
- Toast.LENGTH_SHORT).show();
- btnShuffle.setImageResource(R.drawable.btn_shuffle);
- } else {
- // make repeat to true
- isShuffle = true;
- Toast.makeText(getApplicationContext(), "Shuffle is ON",
- Toast.LENGTH_SHORT).show();
- // make shuffle to false
- isRepeat = false;
- btnShuffle.setImageResource(R.drawable.btn_shuffle_focused);
- btnRepeat.setImageResource(R.drawable.btn_repeat);
- }
- }
- });
- /**
- * Button Click event for Play list click event Launches list activity
- * which displays list of songs
- * */
- btnPlaylist.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- Intent i = new Intent(getApplicationContext(),
- PlayListActivity.class);
- startActivityForResult(i, 100);
- }
- });
- }
- /**
- * Receiving song index from playlist view and play the song
- * */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == 100) {
- currentSongIndex = data.getExtras().getInt("songIndex");
- // play selected song
- playSong(currentSongIndex);
- }
- }
- /**
- * Function to play a song
- *
- * @param songIndex
- * - index of song
- * */
- public void playSong(int songIndex) {
- // Play song
- try {
- mp.reset();
- mp.setDataSource(songsList.get(songIndex).get("songPath"));
- mp.prepare();
- mp.start();
- // Displaying Song title
- String songTitle = songsList.get(songIndex).get("songTitle");
- songTitleLabel.setText(songTitle);
- // Changing Button Image to pause image
- btnPlay.setImageResource(R.drawable.btn_pause);
- // set Progress bar values
- songProgressBar.setProgress(0);
- songProgressBar.setMax(100);
- // Updating progress bar
- updateProgressBar();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * Update timer on seekbar
- * */
- public void updateProgressBar() {
- mHandler.postDelayed(mUpdateTimeTask, 100);
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // TODO Auto-generated method stub
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- mHandler.removeCallbacks(mUpdateTimeTask);
- mp.release();
- }
- return super.onKeyDown(keyCode, event);
- }
- /**
- * Background Runnable thread
- * */
- private Runnable mUpdateTimeTask = new Runnable() {
- public void run() {
- long totalDuration = mp.getDuration();
- long currentDuration = mp.getCurrentPosition();
- // Displaying Total Duration time
- songTotalDurationLabel.setText(""
- + utils.milliSecondsToTimer(totalDuration));
- // Displaying time completed playing
- songCurrentDurationLabel.setText(""
- + utils.milliSecondsToTimer(currentDuration));
- // Updating progress bar
- int progress = (int) (utils.getProgressPercentage(currentDuration,
- totalDuration));
- // System.out.println("Progress : "+progress);
- songProgressBar.setProgress(progress);
- // Running this thread after 100 milliseconds
- mHandler.postDelayed(this, 100);
- }
- };
- /**
- *
- * */
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress,
- boolean fromTouch) {
- }
- /**
- * When user starts moving the progress handler
- * */
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // remove message Handler from updating progress bar
- mHandler.removeCallbacks(mUpdateTimeTask);
- }
- /**
- * When user stops moving the progress hanlder
- * */
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- mHandler.removeCallbacks(mUpdateTimeTask);
- int totalDuration = mp.getDuration();
- int currentPosition = utils.progressToTimer(seekBar.getProgress(),
- totalDuration);
- // forward or backward to certain seconds
- mp.seekTo(currentPosition);
- // update timer progress again
- updateProgressBar();
- }
- /**
- * On Song Playing completed if repeat is ON play same song again if shuffle
- * is ON play random song
- * */
- @Override
- public void onCompletion(MediaPlayer arg0) {
- // check for repeat is ON or OFF
- if (isRepeat) {
- // repeat is on play same song again
- playSong(currentSongIndex);
- } else if (isShuffle) {
- // shuffle is on - play a random song
- Random rand = new Random();
- currentSongIndex = rand.nextInt((songsList.size() - 1) - 0 + 1) + 0;
- playSong(currentSongIndex);
- } else {
- // no repeat or shuffle ON - play next song
- if (currentSongIndex < (songsList.size() - 1)) {
- playSong(currentSongIndex + 1);
- currentSongIndex = currentSongIndex + 1;
- } else {
- // play first song
- playSong(0);
- currentSongIndex = 0;
- }
- }
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- mp.release();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement