Skip to content

Instantly share code, notes, and snippets.

@adrian-bl
Created October 25, 2015 14:09
Show Gist options
  • Save adrian-bl/33841b8d087cb04426d6 to your computer and use it in GitHub Desktop.
Save adrian-bl/33841b8d087cb04426d6 to your computer and use it in GitHub Desktop.
diff --git a/src/ch/blinkenlights/android/vanilla/MediaButtonReceiver.java b/src/ch/blinkenlights/android/vanilla/MediaButtonReceiver.java
index cfb1ae3..a01d2a3 100644
--- a/src/ch/blinkenlights/android/vanilla/MediaButtonReceiver.java
+++ b/src/ch/blinkenlights/android/vanilla/MediaButtonReceiver.java
@@ -158,7 +158,7 @@ public class MediaButtonReceiver extends BroadcastReceiver {
break;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
if (action == KeyEvent.ACTION_DOWN)
- act = PlaybackService.ACTION_REWIND_SONG;
+ act = PlaybackService.ACTION_PREVIOUS_SONG_AUTOPLAY;
break;
case KeyEvent.KEYCODE_MEDIA_PLAY:
if (action == KeyEvent.ACTION_DOWN)
diff --git a/src/ch/blinkenlights/android/vanilla/PlaybackActivity.java b/src/ch/blinkenlights/android/vanilla/PlaybackActivity.java
index e486c62..d921ab3 100644
--- a/src/ch/blinkenlights/android/vanilla/PlaybackActivity.java
+++ b/src/ch/blinkenlights/android/vanilla/PlaybackActivity.java
@@ -178,7 +178,7 @@ public abstract class PlaybackActivity extends Activity
@Override
public void shiftCurrentSong(int delta)
{
- setSong(PlaybackService.get(this).shiftCurrentSong(delta));
+ setSong(PlaybackService.get(this).shiftOrRewindCurrentSong(delta));
}
public void playPause()
diff --git a/src/ch/blinkenlights/android/vanilla/PlaybackService.java b/src/ch/blinkenlights/android/vanilla/PlaybackService.java
index 64715f1..ad7dc7b 100644
--- a/src/ch/blinkenlights/android/vanilla/PlaybackService.java
+++ b/src/ch/blinkenlights/android/vanilla/PlaybackService.java
@@ -154,9 +154,12 @@ 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 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";
+ * 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";
/**
* Change the shuffle mode.
*/
@@ -533,10 +536,9 @@ public final class PlaybackService extends Service
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CALL_GO, 0, 0, Integer.valueOf(0)), 400);
}
} else if (ACTION_NEXT_SONG.equals(action)) {
- setCurrentSong(1);
- userActionTriggered();
+ shiftOrRewindCurrentSong(SongTimeline.SHIFT_NEXT_SONG);
} else if (ACTION_NEXT_SONG_AUTOPLAY.equals(action)) {
- setCurrentSong(1);
+ shiftOrRewindCurrentSong(SongTimeline.SHIFT_NEXT_SONG);
play();
} else if (ACTION_NEXT_SONG_DELAYED.equals(action)) {
if (mHandler.hasMessages(MSG_CALL_GO, Integer.valueOf(1))) {
@@ -549,16 +551,9 @@ public final class PlaybackService extends Service
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CALL_GO, 1, 0, Integer.valueOf(1)), 400);
}
} else if (ACTION_PREVIOUS_SONG.equals(action)) {
- setCurrentSong(-1);
- userActionTriggered();
- } 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);
- }
+ shiftOrRewindCurrentSong(SongTimeline.SHIFT_PREVIOUS_SONG);
+ } else if (ACTION_PREVIOUS_SONG_AUTOPLAY.equals(action)) {
+ shiftOrRewindCurrentSong(SongTimeline.SHIFT_PREVIOUS_SONG);
play();
} else if (ACTION_PLAY.equals(action)) {
play();
@@ -1679,12 +1674,18 @@ public final class PlaybackService extends Service
/**
* Move to next or previous song or album in the queue.
+ * May choose to rewind the currently playing song
*
* @param delta One of SongTimeline.SHIFT_*.
* @return The new current song.
*/
- public Song shiftCurrentSong(int delta)
+ public Song shiftOrRewindCurrentSong(int delta)
{
+ if(delta == SongTimeline.SHIFT_PREVIOUS_SONG && isPlaying() && getPosition() > REWIND_AFTER_PLAYED_MS &&
+ getDuration() > REWIND_AFTER_PLAYED_MS*2) {
+ delta = 0;
+ }
+
Song song = setCurrentSong(delta);
userActionTriggered();
return song;
@@ -2209,25 +2210,25 @@ public final class PlaybackService extends Service
break;
}
case NextSong: {
- Song song = shiftCurrentSong(SongTimeline.SHIFT_NEXT_SONG);
+ Song song = shiftOrRewindCurrentSong(SongTimeline.SHIFT_NEXT_SONG);
if (receiver != null)
receiver.setSong(song);
break;
}
case PreviousSong: {
- Song song = shiftCurrentSong(SongTimeline.SHIFT_PREVIOUS_SONG);
+ Song song = shiftOrRewindCurrentSong(SongTimeline.SHIFT_PREVIOUS_SONG);
if (receiver != null)
receiver.setSong(song);
break;
}
case NextAlbum: {
- Song song = shiftCurrentSong(SongTimeline.SHIFT_NEXT_ALBUM);
+ Song song = shiftOrRewindCurrentSong(SongTimeline.SHIFT_NEXT_ALBUM);
if (receiver != null)
receiver.setSong(song);
break;
}
case PreviousAlbum: {
- Song song = shiftCurrentSong(SongTimeline.SHIFT_PREVIOUS_ALBUM);
+ Song song = shiftOrRewindCurrentSong(SongTimeline.SHIFT_PREVIOUS_ALBUM);
if (receiver != null)
receiver.setSong(song);
break;
Copy link

ghost commented Oct 25, 2015

To correct this error, either provide a redirect_uri that matches what you registered or leave out this parameter to use the default one registered ??,,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment