diff --git a/lib/data/save_repository.dart b/lib/data/save_repository.dart index 0629725..2844337 100644 --- a/lib/data/save_repository.dart +++ b/lib/data/save_repository.dart @@ -42,6 +42,9 @@ class SaveRepository { _adsRemoved = (json['flags'] as Map?)?['adsRemoved'] as bool? ?? false; + _soundEnabled = + (json['flags'] as Map?)?['soundEnabled'] as bool? ?? + true; } } @@ -56,11 +59,13 @@ class SaveRepository { bool _tutorialDone = false; int _endlessBest = 0; bool _adsRemoved = false; + bool _soundEnabled = true; StreakState get streak => _streak; bool get tutorialDone => _tutorialDone; int get endlessBest => _endlessBest; bool get adsRemoved => _adsRemoved; + bool get soundEnabled => _soundEnabled; Future markTutorialDone() { _tutorialDone = true; @@ -72,6 +77,11 @@ class SaveRepository { return _flush(); } + Future setSoundEnabled(bool value) { + _soundEnabled = value; + return _flush(); + } + Future recordEndlessScore(int score) { if (score > _endlessBest) _endlessBest = score; return _flush(); @@ -140,7 +150,11 @@ class SaveRepository { 'best': _streak.best, 'lastYmd': _streak.lastYmd, }, - 'flags': {'tutorialDone': _tutorialDone, 'adsRemoved': _adsRemoved}, + 'flags': { + 'tutorialDone': _tutorialDone, + 'adsRemoved': _adsRemoved, + 'soundEnabled': _soundEnabled, + }, 'endless': {'best': _endlessBest}, }), ); diff --git a/test/data/save_repository_sound_test.dart b/test/data/save_repository_sound_test.dart new file mode 100644 index 0000000..122d329 --- /dev/null +++ b/test/data/save_repository_sound_test.dart @@ -0,0 +1,24 @@ +import 'package:block_seasons/data/save_repository.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +void main() { + setUp(() => SharedPreferences.setMockInitialValues({})); + + test('soundEnabled defaults true and persists across reopen', () async { + final repo = await SaveRepository.open(); + expect(repo.soundEnabled, isTrue); + await repo.setSoundEnabled(false); + expect(repo.soundEnabled, isFalse); + final reopened = await SaveRepository.open(); + expect(reopened.soundEnabled, isFalse); + }); + + test('legacy save without the sound flag reads as true', () async { + SharedPreferences.setMockInitialValues({ + 'save_v1': '{"saveVersion":1,"progress":{},"flags":{"tutorialDone":true}}', + }); + final repo = await SaveRepository.open(); + expect(repo.soundEnabled, isTrue); + }); +}