Tinker-Feedback: 5 Bugfixes (Shuffle/Repeat, Full-Cover, Auto-Play, Scan-Button, Back-Geste) #6

Open
dustin wants to merge 10 commits from fix/tinker-feedback into fix/p0-vollwertigkeit
2 changed files with 48 additions and 0 deletions
Showing only changes of commit 7dbea128e0 - Show all commits
+18
View File
@@ -130,6 +130,22 @@ int startIndexNachFilter(List<bool> behalten, int startIndex) {
return davor.clamp(0, gesamt - 1);
}
/// Übersetzung des Player-Shuffle-Zustands in den `audio_service`-Wert für
/// `PlaybackState.shuffleMode`. Als reine Funktion ausgelagert, damit sie
/// ohne laufenden `AudioPlayer` testbar ist — `_transformEvent()` läuft bei
/// jedem Player-Event und lässt sich nicht isoliert aufrufen.
AudioServiceShuffleMode toAudioServiceShuffleMode(bool enabled) =>
enabled ? AudioServiceShuffleMode.all : AudioServiceShuffleMode.none;
/// Übersetzung des Player-Loop-Modus in den `audio_service`-Wert für
/// `PlaybackState.repeatMode`. Siehe [toAudioServiceShuffleMode].
AudioServiceRepeatMode toAudioServiceRepeatMode(LoopMode loopMode) =>
switch (loopMode) {
LoopMode.one => AudioServiceRepeatMode.one,
LoopMode.all => AudioServiceRepeatMode.all,
LoopMode.off => AudioServiceRepeatMode.none,
};
/// Im Offline-Modus ist keiner der gewählten Titel ohne Netz abspielbar.
class NichtsOfflineVerfuegbar implements Exception {
const NichtsOfflineVerfuegbar();
@@ -633,6 +649,8 @@ class MeloAudioHandler extends BaseAudioHandler with QueueHandler, SeekHandler {
}[_player.processingState] ??
AudioProcessingState.idle,
playing: _player.playing,
shuffleMode: toAudioServiceShuffleMode(_player.shuffleModeEnabled),
repeatMode: toAudioServiceRepeatMode(_player.loopMode),
updatePosition: _player.position,
bufferedPosition: _player.bufferedPosition,
speed: _player.speed,
+30
View File
@@ -0,0 +1,30 @@
import 'package:audio_service/audio_service.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:just_audio/just_audio.dart';
import 'package:melo/player/audio_handler.dart';
void main() {
group('toAudioServiceShuffleMode', () {
test('true wird zu AudioServiceShuffleMode.all', () {
expect(toAudioServiceShuffleMode(true), AudioServiceShuffleMode.all);
});
test('false wird zu AudioServiceShuffleMode.none', () {
expect(toAudioServiceShuffleMode(false), AudioServiceShuffleMode.none);
});
});
group('toAudioServiceRepeatMode', () {
test('LoopMode.one wird zu AudioServiceRepeatMode.one', () {
expect(toAudioServiceRepeatMode(LoopMode.one), AudioServiceRepeatMode.one);
});
test('LoopMode.all wird zu AudioServiceRepeatMode.all', () {
expect(toAudioServiceRepeatMode(LoopMode.all), AudioServiceRepeatMode.all);
});
test('LoopMode.off wird zu AudioServiceRepeatMode.none', () {
expect(toAudioServiceRepeatMode(LoopMode.off), AudioServiceRepeatMode.none);
});
});
}