fix(player): restore OSD auto-hide

close #1360
This commit is contained in:
edde746
2026-06-18 10:18:57 +02:00
parent 52d70dd97d
commit 075e4aeb32
9 changed files with 82 additions and 18 deletions
+31
View File
@@ -41,6 +41,37 @@ void main() {
expect(downResult, KeyEventResult.handled);
expect(upResult, KeyEventResult.handled);
expect(backs, 1);
await tester.pump();
});
testWidgets('tvOS remote back runs on key down for non-keyboard device types', (tester) async {
TvDetectionService.debugSetAppleTVOverride(true);
var backs = 0;
final downResult = handleBackKeyAction(
const KeyDownEvent(
physicalKey: PhysicalKeyboardKey.escape,
logicalKey: LogicalKeyboardKey.escape,
timeStamp: Duration.zero,
deviceType: ui.KeyEventDeviceType.directionalPad,
),
() => backs++,
);
final upResult = handleBackKeyAction(
const KeyUpEvent(
physicalKey: PhysicalKeyboardKey.escape,
logicalKey: LogicalKeyboardKey.escape,
timeStamp: Duration.zero,
deviceType: ui.KeyEventDeviceType.directionalPad,
),
() => backs++,
);
expect(downResult, KeyEventResult.handled);
expect(upResult, KeyEventResult.handled);
expect(backs, 1);
await tester.pump();
});
group('dpadKeyHandler trapHorizontalEdges', () {
@@ -71,6 +71,40 @@ void main() {
expect(controller.controlsVisible, isFalse);
});
testWidgets('show while paused restarts paused auto-hide timer', (tester) async {
final controller = PlayerChromeController();
addTearDown(controller.dispose);
controller.configure(hideDelay: const Duration(milliseconds: 100));
controller.setPlaying(true);
controller.setPlaying(false);
await tester.pump(const Duration(milliseconds: 50));
controller.show();
await tester.pump(const Duration(milliseconds: 99));
expect(controller.controlsVisible, isTrue);
await tester.pump(const Duration(milliseconds: 1));
expect(controller.controlsVisible, isFalse);
});
testWidgets('pointer activity while paused restarts paused auto-hide timer', (tester) async {
final controller = PlayerChromeController();
addTearDown(controller.dispose);
controller.configure(hideDelay: const Duration(milliseconds: 100));
controller.setPlaying(true);
controller.setPlaying(false);
await tester.pump(const Duration(milliseconds: 50));
expect(controller.recordPointerActivity(), isTrue);
await tester.pump(const Duration(milliseconds: 99));
expect(controller.controlsVisible, isTrue);
await tester.pump(const Duration(milliseconds: 1));
expect(controller.controlsVisible, isFalse);
});
test('show stores focus target and notifies even when already visible', () {
final controller = PlayerChromeController();
addTearDown(controller.dispose);