diff --git a/res/values/translatable.xml b/res/values/translatable.xml index f1ae0d2c..a8db1dd1 100644 --- a/res/values/translatable.xml +++ b/res/values/translatable.xml @@ -279,6 +279,8 @@ THE SOFTWARE. Dequeue rest Queue Toggle controls + Seek 10 seconds backward + Seek 10 seconds forward Filebrowser home Filebrowser starts at this directory diff --git a/res/values/untranslatable.xml b/res/values/untranslatable.xml index cc2b6d7e..43b76cab 100644 --- a/res/values/untranslatable.xml +++ b/res/values/untranslatable.xml @@ -53,6 +53,8 @@ THE SOFTWARE. ClearQueue ShowQueue ToggleControls + SeekForward + SeekBackward @@ -71,6 +73,8 @@ THE SOFTWARE. @string/clear_queue @string/show_queue @string/toggle_controls + @string/seek_10s_forward + @string/seek_10s_backward @string/play diff --git a/src/ch/blinkenlights/android/vanilla/Action.java b/src/ch/blinkenlights/android/vanilla/Action.java index 0f94a953..c207dd18 100644 --- a/src/ch/blinkenlights/android/vanilla/Action.java +++ b/src/ch/blinkenlights/android/vanilla/Action.java @@ -87,7 +87,15 @@ enum Action { /** * Toggle the controls in the playback activity. */ - ToggleControls; + ToggleControls, + /** + * Seek 10 seconds forward + */ + SeekForward, + /** + * Seek 10 seconds back + */ + SeekBackward; /** * Retrieve an action from the given SharedPreferences. @@ -108,4 +116,4 @@ enum Action { return def; } } -} \ No newline at end of file +} diff --git a/src/ch/blinkenlights/android/vanilla/PlaybackService.java b/src/ch/blinkenlights/android/vanilla/PlaybackService.java index 52c38e97..a74ff6b7 100644 --- a/src/ch/blinkenlights/android/vanilla/PlaybackService.java +++ b/src/ch/blinkenlights/android/vanilla/PlaybackService.java @@ -2114,6 +2114,23 @@ public final class PlaybackService extends Service case ToggleControls: // Handled in FullPlaybackActivity.performAction break; + case SeekForward: + if (mCurrentSong != null) { + mPendingSeekSong = mCurrentSong.id; + mPendingSeek = getPosition() + 10000; + // We 'abuse' setCurrentSong as it will stop the playback and restart it + // at the new position, taking care of the ui update + setCurrentSong(0); + } + break; + case SeekBackward: + if (mCurrentSong != null) { + mPendingSeekSong = mCurrentSong.id; + mPendingSeek = getPosition() - 10000; + if (mPendingSeek < 1) mPendingSeek = 1; // must at least be 1 + setCurrentSong(0); + } + break; default: throw new IllegalArgumentException("Invalid action: " + action); }