diff --git a/app/src/main/java/com/afxmusic/MainActivity.java b/app/src/main/java/com/afxmusic/MainActivity.java index 7ea321f..5b62f38 100644 --- a/app/src/main/java/com/afxmusic/MainActivity.java +++ b/app/src/main/java/com/afxmusic/MainActivity.java @@ -405,6 +405,7 @@ public void onClick(View view) { mEndMarker.setVisibility(View.VISIBLE); mSetLoopButton.setText("Clear loop"); + mPlayButton.setBackgroundResource(R.drawable.pause); } } }); diff --git a/app/src/main/java/com/afxmusic/MediaPlayerHolder.java b/app/src/main/java/com/afxmusic/MediaPlayerHolder.java index a1b5d23..979f6b6 100644 --- a/app/src/main/java/com/afxmusic/MediaPlayerHolder.java +++ b/app/src/main/java/com/afxmusic/MediaPlayerHolder.java @@ -260,13 +260,20 @@ public void setLoop(int loopMode, TextView startText, TextView endText) { loopStart = loopEnd; loopEnd = temp; } + if (loopEnd == songLength) { //handle loopEnd is at very end of song + //Log.d(TAG, "LoopEnd == SongLength: " + loopEnd); + loopEnd -= 250; + //Log.d(TAG, "Changing LoopEnd: " + loopEnd); + } startText.setText("Loop Start: " + convertToTime(loopStart)); endText.setText("Loop End: " + convertToTime(loopEnd)); looping = true; + mMediaPlayer.setLooping(false); } else { // Clear loop looping = false; + mMediaPlayer.setLooping(true); startText.setText("Loop Start: N/A"); endText.setText("Loop End: N/A"); @@ -333,6 +340,23 @@ public double[] getTime(){ return time; } + /** Same functionality as play() but + * is void and does not pause if playing already. + * Only plays. + * */ + private void onlyPlay() { + if (mMediaPlayer != null){ + startUpdatingCallbackWithPosition(); + if(!mMediaPlayer.isPlaying()) { + mMediaPlayer.start(); + mMediaPlayer.setPlaybackParams(mMediaPlayer.getPlaybackParams().setSpeed(speed)); + if (mPlaybackInfoListener != null) { + mPlaybackInfoListener.onStateChanged(PlaybackInfoListener.State.PLAYING); + } + } + } + } + /** * Syncs the mMediaPlayer position with mPlaybackProgressCallback via recurring task. */ @@ -348,9 +372,11 @@ public void run() { // Looping if (looping) { int curr = mMediaPlayer.getCurrentPosition(); - if (curr > loopEnd) { - // Log.d(TAG, "Looping back from " + loopEnd + " to " + loopStart); + if (curr >= songLength || curr >= loopEnd) { + //Log.d(TAG, "Looping back from " + loopEnd + " to " + loopStart); mMediaPlayer.seekTo(loopStart); + onlyPlay(); + } } }