feat: implement comprehensive statistics tracking and refactor checkout engine

BREAKING CHANGE: Database schema updated from v3 to v9 (destructive migration)

Major Features:
- Statistics system: Track player performance (darts, points, matches, double-outs)
- Match state management: ONGOING/COMPLETED/CANCELED with state-based queries
- Settings activity: Day/night mode and standard game mode preferences
- CheckoutEngine refactored to standalone utility class with 1/2/3-dart methods

CheckoutConstants Overhaul:
- Generate all possible double-out combinations (~37,200 routes)
- Intelligent route selection (fewer darts > T20/T19 > higher doubles)
- Store both optimal routes and complete alternatives

GameActivity Enhancements:
- Automatic statistics tracking on turn submission and win
- Career average calculation and database updates
- Fixed race condition with dart value capture

Database Changes:
- Added Statistics entity and StatisticsDao
- Player ID migration: int → long for consistency
- Match entity: added MatchState enum and helper methods
- MatchDao: new state-based query methods

Developer Experience:
- Comprehensive JavaDoc across all new/modified classes
- Test harness for checkout generation validation
- Improved code organization with utils package separation
This commit is contained in:
Alexander Doerflinger
2026-01-30 08:21:26 +01:00
parent 2953a1bf67
commit c2f18d9328
26 changed files with 1246 additions and 185 deletions

View File

@@ -9,6 +9,8 @@ activity = "1.12.2"
constraintlayout = "2.2.1"
glide = "5.0.5"
room = "2.8.4"
preferences = "1.2.0"
preference = "1.2.1"
[libraries]
junit = { group = "junit", name = "junit", version.ref = "junit" }
@@ -21,6 +23,8 @@ constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayo
glide = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide"}
room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room"}
room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room"}
preferences = { group = "androidx.preference", name="preference-ktx", version.ref="preferences" }
preference = { group = "androidx.preference", name = "preference", version.ref = "preference" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }