diff --git a/lib/game/components/backbox/backbox.dart b/lib/game/components/backbox/backbox.dart index 08f7068a..55d7fa84 100644 --- a/lib/game/components/backbox/backbox.dart +++ b/lib/game/components/backbox/backbox.dart @@ -80,15 +80,11 @@ class Backbox extends PositionComponent with ZIndex { GameOverInfoDisplay( onShare: () { _bloc.add( - ShareScoreRequested( - score: state.score, - initials: state.initials, - character: state.character, - ), + ShareScoreRequested(score: state.score), ); }, onNavigate: () { - openLink(ShareRepository.openSourceUrl); + openLink(ShareRepository.googleIOEvent); }, ), ); diff --git a/lib/game/components/backbox/bloc/backbox_bloc.dart b/lib/game/components/backbox/bloc/backbox_bloc.dart index 6139b557..df29c5f1 100644 --- a/lib/game/components/backbox/bloc/backbox_bloc.dart +++ b/lib/game/components/backbox/bloc/backbox_bloc.dart @@ -51,9 +51,7 @@ class BackboxBloc extends Bloc { ); emit( InitialsSuccessState( - initials: event.initials, score: event.score, - character: event.character, ), ); } catch (error, stackTrace) { @@ -68,9 +66,7 @@ class BackboxBloc extends Bloc { ) async { emit( ShareState( - initials: event.initials, score: event.score, - character: event.character, ), ); } diff --git a/lib/game/components/backbox/bloc/backbox_event.dart b/lib/game/components/backbox/bloc/backbox_event.dart index 2851d75f..a842d191 100644 --- a/lib/game/components/backbox/bloc/backbox_event.dart +++ b/lib/game/components/backbox/bloc/backbox_event.dart @@ -53,27 +53,19 @@ class PlayerInitialsSubmitted extends BackboxEvent { } /// {@template share_score_requested} -/// Event that request the user to share score and initials. +/// Event when user requests to share their score. /// {@endtemplate} class ShareScoreRequested extends BackboxEvent { /// {@macro share_score_requested} const ShareScoreRequested({ required this.score, - required this.initials, - required this.character, }); /// Player's score. final int score; - /// Player's initials. - final String initials; - - /// Player's character. - final CharacterTheme character; - @override - List get props => [score, initials, character]; + List get props => [score]; } /// Event that triggers the fetching of the leaderboard diff --git a/lib/game/components/backbox/bloc/backbox_state.dart b/lib/game/components/backbox/bloc/backbox_state.dart index 15997817..505d8af9 100644 --- a/lib/game/components/backbox/bloc/backbox_state.dart +++ b/lib/game/components/backbox/bloc/backbox_state.dart @@ -55,27 +55,19 @@ class InitialsFormState extends BackboxState { } /// {@template initials_success_state} -/// State when the leaderboard was successfully loaded. +/// State when the score was successfully sended. /// {@endtemplate} class InitialsSuccessState extends BackboxState { /// {@macro initials_success_state} const InitialsSuccessState({ required this.score, - required this.initials, - required this.character, }) : super(); /// Player's score. final int score; - /// Player's initials. - final String initials; - - /// Player's character. - final CharacterTheme character; - @override - List get props => [score, initials, character]; + List get props => [score]; } /// State when the initials submission failed. @@ -91,19 +83,11 @@ class ShareState extends BackboxState { /// {@macro share_state} const ShareState({ required this.score, - required this.initials, - required this.character, }) : super(); /// Player's score. final int score; - /// Player's initials. - final String initials; - - /// Player's character. - final CharacterTheme character; - @override - List get props => [score, initials, character]; + List get props => [score]; } diff --git a/lib/game/components/backbox/displays/game_over_info_display.dart b/lib/game/components/backbox/displays/game_over_info_display.dart index 3e180461..9adbb9df 100644 --- a/lib/game/components/backbox/displays/game_over_info_display.dart +++ b/lib/game/components/backbox/displays/game_over_info_display.dart @@ -140,7 +140,8 @@ class _TitleBackgroundSpriteComponent extends SpriteComponent with HasGameRef { Future onLoad() async { await super.onLoad(); final sprite = Sprite( - gameRef.images.fromCache(Assets.images.backbox.button.share.keyName), + gameRef.images + .fromCache(Assets.images.backbox.displayTitleDecoration.keyName), ); this.sprite = sprite; size = sprite.originalSize / 22; diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index 13da6f46..65e4ba76 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -100,7 +100,8 @@ extension PinballGameAssetsX on PinballGame { images.load(components.Assets.images.sparky.bumper.c.dimmed.keyName), images.load(components.Assets.images.backbox.marquee.keyName), images.load(components.Assets.images.backbox.displayDivider.keyName), - images.load(components.Assets.images.backbox.button.share.keyName), + images.load( + components.Assets.images.backbox.displayTitleDecoration.keyName), images.load(components.Assets.images.googleWord.letter1.lit.keyName), images.load(components.Assets.images.googleWord.letter1.dimmed.keyName), images.load(components.Assets.images.googleWord.letter2.lit.keyName), diff --git a/packages/pinball_components/assets/images/backbox/button/share.png b/packages/pinball_components/assets/images/backbox/display_title_decoration.png similarity index 100% rename from packages/pinball_components/assets/images/backbox/button/share.png rename to packages/pinball_components/assets/images/backbox/display_title_decoration.png diff --git a/packages/pinball_components/lib/gen/assets.gen.dart b/packages/pinball_components/lib/gen/assets.gen.dart index a3570985..0288d3f4 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -59,13 +59,14 @@ class $AssetsImagesAndroidGen { class $AssetsImagesBackboxGen { const $AssetsImagesBackboxGen(); - $AssetsImagesBackboxButtonGen get button => - const $AssetsImagesBackboxButtonGen(); - /// File path: assets/images/backbox/display-divider.png AssetGenImage get displayDivider => const AssetGenImage('assets/images/backbox/display-divider.png'); + /// File path: assets/images/backbox/display_title_decoration.png + AssetGenImage get displayTitleDecoration => + const AssetGenImage('assets/images/backbox/display_title_decoration.png'); + /// File path: assets/images/backbox/marquee.png AssetGenImage get marquee => const AssetGenImage('assets/images/backbox/marquee.png'); @@ -385,14 +386,6 @@ class $AssetsImagesAndroidSpaceshipGen { const AssetGenImage('assets/images/android/spaceship/saucer.png'); } -class $AssetsImagesBackboxButtonGen { - const $AssetsImagesBackboxButtonGen(); - - /// File path: assets/images/backbox/button/share.png - AssetGenImage get share => - const AssetGenImage('assets/images/backbox/button/share.png'); -} - class $AssetsImagesDashBumperGen { const $AssetsImagesDashBumperGen(); diff --git a/packages/share_repository/lib/src/share_repository.dart b/packages/share_repository/lib/src/share_repository.dart index 12d6c04c..1b025e67 100644 --- a/packages/share_repository/lib/src/share_repository.dart +++ b/packages/share_repository/lib/src/share_repository.dart @@ -12,7 +12,8 @@ class ShareRepository { final String _appUrl; /// Url to the Github Open Source Pinball project. - static const openSourceUrl = 'https://github.com/VGVentures/pinball'; + static const openSourceCode = 'https://github.com/VGVentures/pinball'; + static const googleIOEvent = 'https://events.google.com/io/'; /// Returns a url to share the [value] on the given [platform]. /// diff --git a/test/game/components/backbox/backbox_test.dart b/test/game/components/backbox/backbox_test.dart index ecd8dc00..510f4c9d 100644 --- a/test/game/components/backbox/backbox_test.dart +++ b/test/game/components/backbox/backbox_test.dart @@ -38,7 +38,7 @@ class _TestGame extends Forge2DGame character.leaderboardIcon.keyName, Assets.images.backbox.marquee.keyName, Assets.images.backbox.displayDivider.keyName, - Assets.images.backbox.button.share.keyName, + Assets.images.backbox.displayTitleDecoration.keyName, ]); } @@ -298,6 +298,56 @@ void main() { }, ); + flameTester.test( + 'open Google IO Event url when navigating', + (game) async { + when(() => urlLauncher.canLaunch(any())) + .thenAnswer((_) async => true); + when( + () => urlLauncher.launch( + any(), + useSafariVC: any(named: 'useSafariVC'), + useWebView: any(named: 'useWebView'), + enableJavaScript: any(named: 'enableJavaScript'), + enableDomStorage: any(named: 'enableDomStorage'), + universalLinksOnly: any(named: 'universalLinksOnly'), + headers: any(named: 'headers'), + ), + ).thenAnswer((_) async => true); + + final state = InitialsSuccessState( + score: 100, + initials: 'AAA', + character: theme.AndroidTheme(), + ); + whenListen( + bloc, + Stream.value(state), + initialState: state, + ); + final backbox = Backbox.test(bloc: bloc); + await game.pump(backbox); + + final shareLink = + game.descendants().whereType().first; + shareLink.onTapDown(_MockTapDownInfo()); + + await game.ready(); + + verify( + () => urlLauncher.launch( + ShareRepository.googleIOEvent, + useSafariVC: any(named: 'useSafariVC'), + useWebView: any(named: 'useWebView'), + enableJavaScript: any(named: 'enableJavaScript'), + enableDomStorage: any(named: 'enableDomStorage'), + universalLinksOnly: any(named: 'universalLinksOnly'), + headers: any(named: 'headers'), + ), + ); + }, + ); + flameTester.test( 'open OpenSource url when navigating', (game) async { @@ -336,7 +386,7 @@ void main() { verify( () => urlLauncher.launch( - ShareRepository.openSourceUrl, + ShareRepository.openSourceCode, useSafariVC: any(named: 'useSafariVC'), useWebView: any(named: 'useWebView'), enableJavaScript: any(named: 'enableJavaScript'), diff --git a/test/game/components/backbox/bloc/backbox_bloc_test.dart b/test/game/components/backbox/bloc/backbox_bloc_test.dart index 62c45727..8b50b289 100644 --- a/test/game/components/backbox/bloc/backbox_bloc_test.dart +++ b/test/game/components/backbox/bloc/backbox_bloc_test.dart @@ -56,11 +56,7 @@ void main() { ), expect: () => [ LoadingState(), - InitialsSuccessState( - score: 10, - initials: 'AAA', - character: DashTheme(), - ), + InitialsSuccessState(score: 10), ], ); @@ -101,18 +97,10 @@ void main() { }, build: () => BackboxBloc(leaderboardRepository: leaderboardRepository), act: (bloc) => bloc.add( - ShareScoreRequested( - score: 100, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareScoreRequested(score: 100), ), expect: () => [ - ShareState( - score: 100, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareState(score: 100), ], ); }); diff --git a/test/game/components/backbox/bloc/backbox_event_test.dart b/test/game/components/backbox/bloc/backbox_event_test.dart index 9a4f8708..bf8ba756 100644 --- a/test/game/components/backbox/bloc/backbox_event_test.dart +++ b/test/game/components/backbox/bloc/backbox_event_test.dart @@ -126,78 +126,42 @@ void main() { group('ScoreShareRequested', () { test('can be instantiated', () { expect( - ShareScoreRequested( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareScoreRequested(score: 0), isNotNull, ); }); test('supports value comparison', () { expect( - ShareScoreRequested( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareScoreRequested(score: 0), equals( - ShareScoreRequested( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareScoreRequested(score: 0), ), ); expect( - ShareScoreRequested( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareScoreRequested(score: 0), isNot( equals( - ShareScoreRequested( - score: 1, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareScoreRequested(score: 1), ), ), ); expect( - ShareScoreRequested( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareScoreRequested(score: 0), isNot( equals( - ShareScoreRequested( - score: 0, - initials: 'AAA', - character: SparkyTheme(), - ), + ShareScoreRequested(score: 0), ), ), ); expect( - ShareScoreRequested( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareScoreRequested(score: 0), isNot( equals( - ShareScoreRequested( - score: 0, - initials: 'BBB', - character: AndroidTheme(), - ), + ShareScoreRequested(score: 0), ), ), ); diff --git a/test/game/components/backbox/bloc/backbox_state_test.dart b/test/game/components/backbox/bloc/backbox_state_test.dart index 6939a9de..19e4d029 100644 --- a/test/game/components/backbox/bloc/backbox_state_test.dart +++ b/test/game/components/backbox/bloc/backbox_state_test.dart @@ -116,28 +116,16 @@ void main() { group('InitialsSuccessState', () { test('can be instantiated', () { expect( - InitialsSuccessState( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + InitialsSuccessState(score: 0), isNotNull, ); }); test('supports value comparison', () { expect( - InitialsSuccessState( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + InitialsSuccessState(score: 0), equals( - InitialsSuccessState( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + InitialsSuccessState(score: 0), ), ); }); @@ -155,28 +143,16 @@ void main() { group('ShareState', () { test('can be instantiated', () { expect( - ShareState( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareState(score: 0), isNotNull, ); }); test('supports value comparison', () { expect( - ShareState( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareState(score: 0), equals( - ShareState( - score: 0, - initials: 'AAA', - character: AndroidTheme(), - ), + ShareState(score: 0), ), ); }); diff --git a/test/game/components/backbox/displays/game_over_info_display_test.dart b/test/game/components/backbox/displays/game_over_info_display_test.dart index ba65572e..373e6e3b 100644 --- a/test/game/components/backbox/displays/game_over_info_display_test.dart +++ b/test/game/components/backbox/displays/game_over_info_display_test.dart @@ -20,7 +20,7 @@ class _TestGame extends Forge2DGame with HasTappables { images.prefix = ''; await images.loadAll( [ - Assets.images.backbox.button.share.keyName, + Assets.images.backbox.displayTitleDecoration.keyName, ], ); }