summaryrefslogtreecommitdiff
path: root/player-android
AgeCommit message (Collapse)Author
2026-05-20Fix PlayerApiClient const constructor and Media.tags deserialization (d9+e9)Paul Buetow
- Remove const from PlayerApiClient constructor (Uri is not const-constructable) - Replace .cast<String>() with .whereType<String>().toList() in Media.fromJson to silently drop non-string and null tag elements instead of throwing TypeError - Add regression test: tags [1, 'valid', null] deserialized as ['valid'] Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20Guard dateTimeFromJson against malformed date strings (c9)Paul Buetow
Wrap DateTime.parse in try/catch so a malformed or non-ISO-8601 date string from the server degrades to null instead of throwing a FormatException that crashes model deserialization across Media, MediaSet, User, PodcastFeed, PodcastEpisode, PlaybackHint, Share, and Note. Add player-android/test/json_helpers_test.dart with 11 tests covering null, empty, non-string, valid ISO, and malformed inputs (regression guard for the original crash). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18Add named routes and widget smoke tests to player-androidPaul Buetow
Adds HomeScreen ('/') and NowPlayingScreen ('/now-playing') as the first two named routes in PlayerAndroidApp, replacing the anonymous home widget. Widget smoke tests verify that the app starts on the library screen, navigates to the now-playing screen on button tap, and back-navigates correctly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18Add Android testing strategy proposalPaul Buetow
Produces player-android/docs/testing-strategy.md as a decision gate covering test scope, CI emulator options, integration_test vs Patrol, and LLM access mode. Reviewed by sub-agent; all issues addressed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18Add Dart unit tests for models and API client constructorPaul Buetow
Add fromJson/toJson round-trip tests for all 9 Dart models (Media, MediaSet, User, Tag, Note, Share, PodcastFeed, PodcastEpisode, PlaybackHint) and 3 PlayerApiClient constructor tests. Each model group covers a fully-populated round-trip (including int-to-double cast verification and ISO-8601 DateTime value comparison) and an exhaustive defaults-from-empty-map test. All 21 tests run via 'flutter test' with no emulator. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17Track player-android Flutter lockfilePaul Buetow
2026-05-17Complete player-android Flutter scaffoldPaul Buetow
2026-05-17Add player-android/ Flutter skeletonPaul Buetow