diff --git a/lib/how_to_play/widgets/how_to_play_dialog.dart b/lib/how_to_play/widgets/how_to_play_dialog.dart index 3dc2c62b..f1b848f8 100644 --- a/lib/how_to_play/widgets/how_to_play_dialog.dart +++ b/lib/how_to_play/widgets/how_to_play_dialog.dart @@ -3,8 +3,10 @@ import 'dart:async'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:pinball/gen/gen.dart'; import 'package:pinball/l10n/l10n.dart'; +import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_ui/pinball_ui.dart'; import 'package:platform_helper/platform_helper.dart'; @@ -50,10 +52,13 @@ extension on Control { } Future showHowToPlayDialog(BuildContext context) { + final audio = context.read(); return showDialog( context: context, builder: (_) => HowToPlayDialog(), - ); + ).then((_) { + audio.startScreenSelect(); + }); } class HowToPlayDialog extends StatefulWidget { diff --git a/lib/select_character/view/character_selection_page.dart b/lib/select_character/view/character_selection_page.dart index 3b00829b..7ec8d854 100644 --- a/lib/select_character/view/character_selection_page.dart +++ b/lib/select_character/view/character_selection_page.dart @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:pinball/how_to_play/how_to_play.dart'; import 'package:pinball/l10n/l10n.dart'; import 'package:pinball/select_character/select_character.dart'; +import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_theme/pinball_theme.dart'; import 'package:pinball_ui/pinball_ui.dart'; diff --git a/packages/pinball_audio/assets/sfx/start_screen_select.mp3 b/packages/pinball_audio/assets/sfx/start_screen_select.mp3 new file mode 100644 index 00000000..7829086c Binary files /dev/null and b/packages/pinball_audio/assets/sfx/start_screen_select.mp3 differ diff --git a/packages/pinball_audio/lib/gen/assets.gen.dart b/packages/pinball_audio/lib/gen/assets.gen.dart index 1b3bdfb9..da96b5c8 100644 --- a/packages/pinball_audio/lib/gen/assets.gen.dart +++ b/packages/pinball_audio/lib/gen/assets.gen.dart @@ -16,6 +16,7 @@ class $AssetsSfxGen { String get google => 'assets/sfx/google.mp3'; String get plim => 'assets/sfx/plim.mp3'; + String get startScreenSelect => 'assets/sfx/start_screen_select.mp3'; } class Assets { diff --git a/packages/pinball_audio/lib/src/pinball_audio.dart b/packages/pinball_audio/lib/src/pinball_audio.dart index 8bda14e5..92ee01a8 100644 --- a/packages/pinball_audio/lib/src/pinball_audio.dart +++ b/packages/pinball_audio/lib/src/pinball_audio.dart @@ -74,6 +74,7 @@ class PinballAudio { await Future.wait([ _preCacheSingleAudio(_prefixFile(Assets.sfx.google)), + _preCacheSingleAudio(_prefixFile(Assets.sfx.startScreenSelect)), _preCacheSingleAudio(_prefixFile(Assets.music.background)), ]); } @@ -88,6 +89,11 @@ class PinballAudio { _playSingleAudio(_prefixFile(Assets.sfx.google)); } + /// Plays the select screen sound effect + void startScreenSelect() { + _playSingleAudio(_prefixFile(Assets.sfx.startScreenSelect)); + } + /// Plays the background music void backgroundMusic() { _loopSingleAudio(_prefixFile(Assets.music.background)); diff --git a/packages/pinball_audio/test/src/pinball_audio_test.dart b/packages/pinball_audio/test/src/pinball_audio_test.dart index 81d53bee..57d4eaf6 100644 --- a/packages/pinball_audio/test/src/pinball_audio_test.dart +++ b/packages/pinball_audio/test/src/pinball_audio_test.dart @@ -93,6 +93,10 @@ void main() { () => preCacheSingleAudio .onCall('packages/pinball_audio/assets/sfx/google.mp3'), ).called(1); + verify( + () => preCacheSingleAudio + .onCall('packages/pinball_audio/assets/sfx/start_screen_select.mp3'), + ).called(1); verify( () => preCacheSingleAudio .onCall('packages/pinball_audio/assets/music/background.mp3'), @@ -131,6 +135,18 @@ void main() { }); }); + group('startScreenSelect', () { + test('plays the correct file', () async { + await audio.load(); + audio.startScreenSelect(); + + verify( + () => playSingleAudio + .onCall('packages/pinball_audio/${Assets.sfx.startScreenSelect}'), + ).called(1); + }); + }); + group('backgroundMusic', () { test('plays the correct file', () async { await audio.load(); diff --git a/test/how_to_play/how_to_play_dialog_test.dart b/test/how_to_play/how_to_play_dialog_test.dart index 2e3d3fd4..a230aad8 100644 --- a/test/how_to_play/how_to_play_dialog_test.dart +++ b/test/how_to_play/how_to_play_dialog_test.dart @@ -93,5 +93,30 @@ void main() { await tester.pumpAndSettle(); expect(find.byType(HowToPlayDialog), findsNothing); }); + + testWidgets( + 'plays the start screen select music on dismiss', + (tester) async { + final audio = MockPinballAudio(); + await tester.pumpApp( + Builder( + builder: (context) { + return TextButton( + onPressed: () => showHowToPlayDialog(context), + child: const Text('test'), + ); + }, + ), + pinballAudio: audio, + ); + expect(find.byType(HowToPlayDialog), findsNothing); + await tester.tap(find.text('test')); + await tester.pumpAndSettle(); + + await tester.tapAt(Offset.zero); + await tester.pumpAndSettle(); + verify(audio.startScreenSelect).called(1); + }, + ); }); }