diff --git a/src/ch/blinkenlights/android/vanilla/MediaButtonReceiver.java b/src/ch/blinkenlights/android/vanilla/MediaButtonReceiver.java index c0c0f84a..5a5c85c5 100644 --- a/src/ch/blinkenlights/android/vanilla/MediaButtonReceiver.java +++ b/src/ch/blinkenlights/android/vanilla/MediaButtonReceiver.java @@ -188,7 +188,7 @@ public class MediaButtonReceiver extends BroadcastReceiver { break; case KeyEvent.KEYCODE_MEDIA_PREVIOUS: if (action == KeyEvent.ACTION_DOWN) - act = PlaybackService.ACTION_PREVIOUS_SONG_AUTOPLAY; + act = PlaybackService.ACTION_REWIND_SONG; break; case KeyEvent.KEYCODE_MEDIA_PLAY: if (action == KeyEvent.ACTION_DOWN) diff --git a/src/ch/blinkenlights/android/vanilla/PlaybackService.java b/src/ch/blinkenlights/android/vanilla/PlaybackService.java index d5e340a1..c0dc4a8c 100644 --- a/src/ch/blinkenlights/android/vanilla/PlaybackService.java +++ b/src/ch/blinkenlights/android/vanilla/PlaybackService.java @@ -93,6 +93,11 @@ public final class PlaybackService extends Service private static final int NOTIFICATION_ID = 2; + /** + * Rewind song if we already played more than 2.5 sec + */ + private static final int REWIND_AFTER_PLAYED_MS = 2500; + /** * Action for startService: toggle playback on/off. */ @@ -146,12 +151,9 @@ public final class PlaybackService extends Service */ public static final String ACTION_PREVIOUS_SONG = "ch.blinkenlights.android.vanilla.action.PREVIOUS_SONG"; /** - * Action for startService: go back to the previous song. - * - * Like ACTION_PREVIOUS_SONG, but starts playing automatically if paused - * when this is called. - */ - public static final String ACTION_PREVIOUS_SONG_AUTOPLAY = "ch.blinkenlights.android.vanilla.action.PREVIOUS_SONG_AUTOPLAY"; + * Action for startService: go back to the previous song OR just rewind if it played for less than 5 seconds + */ + public static final String ACTION_REWIND_SONG = "ch.blinkenlights.android.vanilla.action.REWIND_SONG"; /** * Change the shuffle mode. */ @@ -507,8 +509,14 @@ public final class PlaybackService extends Service } else if (ACTION_PREVIOUS_SONG.equals(action)) { setCurrentSong(-1); userActionTriggered(); - } else if (ACTION_PREVIOUS_SONG_AUTOPLAY.equals(action)) { - setCurrentSong(-1); + } else if (ACTION_REWIND_SONG.equals(action)) { + /* only rewind song IF we played more than 2.5 sec (and song is longer than 5 sec) */ + if(getPosition() > REWIND_AFTER_PLAYED_MS && + getDuration() > REWIND_AFTER_PLAYED_MS*2) { + setCurrentSong(0); + } else { + setCurrentSong(-1); + } play(); } else if (ACTION_PLAY.equals(action)) { play(); @@ -1295,6 +1303,15 @@ public final class PlaybackService extends Service return mMediaPlayer.getCurrentPosition(); } + /** + * Returns the song duration in milliseconds. + */ + public int getDuration() + { + if (!mMediaPlayerInitialized) + return 0; + return mMediaPlayer.getDuration(); + } /** * Seek to a position in the current song. *