parent
fdcb2efe30
commit
bb189583d8
@ -0,0 +1,139 @@ |
|||||||
|
# CLAUDE.md |
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. |
||||||
|
|
||||||
|
## Project Overview |
||||||
|
|
||||||
|
This is **Poker Analytics**, a comprehensive Android application for tracking and analyzing poker sessions. The app supports both cash games and tournaments, providing detailed statistics, reporting, and data visualization capabilities. |
||||||
|
|
||||||
|
### Key Features |
||||||
|
- Session tracking (cash games and tournaments) |
||||||
|
- Advanced filtering and reporting |
||||||
|
- Bankroll management |
||||||
|
- Hand history import and replay |
||||||
|
- Statistical analysis and charting |
||||||
|
- Data backup and export functionality |
||||||
|
- Multi-currency support |
||||||
|
|
||||||
|
## Development Commands |
||||||
|
|
||||||
|
### Building the Project |
||||||
|
```bash |
||||||
|
./gradlew assembleStandardRelease # Build release APK |
||||||
|
./gradlew assembleStandardDebug # Build debug APK |
||||||
|
./gradlew build # Build all variants |
||||||
|
``` |
||||||
|
|
||||||
|
### Running Tests |
||||||
|
```bash |
||||||
|
./gradlew test # Run unit tests |
||||||
|
./gradlew connectedAndroidTest # Run instrumented tests (requires device/emulator) |
||||||
|
./gradlew testStandardDebugUnitTest # Run specific unit tests |
||||||
|
``` |
||||||
|
|
||||||
|
### Cleaning |
||||||
|
```bash |
||||||
|
./gradlew clean # Clean build artifacts |
||||||
|
``` |
||||||
|
|
||||||
|
### Build Configuration |
||||||
|
- **Target SDK**: 35 (Android 15) |
||||||
|
- **Min SDK**: 23 (Android 6.0) |
||||||
|
- **Build Tools**: 30.0.3 |
||||||
|
- **Kotlin Version**: 1.9.24 |
||||||
|
- **Realm Schema Version**: 14 |
||||||
|
|
||||||
|
## Architecture Overview |
||||||
|
|
||||||
|
### Package Structure |
||||||
|
The main source code is organized under `app/src/main/java/net/pokeranalytics/android/`: |
||||||
|
|
||||||
|
#### Core Components |
||||||
|
- **`model/`** - Data models and business logic |
||||||
|
- `realm/` - Realm database models (Session, Bankroll, Result, etc.) |
||||||
|
- `filter/` - Query system for filtering sessions |
||||||
|
- `migrations/` - Database migration handling |
||||||
|
- `handhistory/` - Hand history data structures |
||||||
|
|
||||||
|
- **`ui/`** - User interface components |
||||||
|
- `activity/` - Main activities (HomeActivity, SessionActivity, etc.) |
||||||
|
- `fragment/` - UI fragments organized by feature |
||||||
|
- `adapter/` - RecyclerView adapters and data sources |
||||||
|
- `modules/` - Feature-specific UI modules |
||||||
|
|
||||||
|
- **`calculus/`** - Statistics and calculation engine |
||||||
|
- Core calculation logic for poker statistics |
||||||
|
- Report generation system |
||||||
|
- Performance tracking |
||||||
|
|
||||||
|
- **`util/`** - Utility classes |
||||||
|
- `csv/` - CSV import/export functionality |
||||||
|
- `billing/` - In-app purchase handling |
||||||
|
- `extensions/` - Kotlin extension functions |
||||||
|
|
||||||
|
#### Key Classes |
||||||
|
- **`Session`** (`model/realm/Session.kt`): Core session data model |
||||||
|
- **`HomeActivity`** (`ui/activity/HomeActivity.kt`): Main app entry point with tab navigation |
||||||
|
- **`PokerAnalyticsApplication`**: Application class handling initialization |
||||||
|
|
||||||
|
### Database Architecture |
||||||
|
The app uses **Realm** database with these key entities: |
||||||
|
- `Session` - Individual poker sessions |
||||||
|
- `Bankroll` - Bankroll management |
||||||
|
- `Result` - Session results and statistics |
||||||
|
- `ComputableResult` - Pre-computed statistics for performance |
||||||
|
- `Filter` - Saved filter configurations |
||||||
|
- `HandHistory` - Hand-by-hand game data |
||||||
|
|
||||||
|
### UI Architecture |
||||||
|
- **MVVM pattern** with Android Architecture Components |
||||||
|
- **Fragment-based navigation** with bottom navigation tabs |
||||||
|
- **Custom RecyclerView adapters** for data presentation |
||||||
|
- **Material Design** components |
||||||
|
|
||||||
|
## Key Technologies |
||||||
|
|
||||||
|
### Core Dependencies |
||||||
|
- **Realm Database** (10.15.1) - Local data storage |
||||||
|
- **Kotlin Coroutines** - Asynchronous programming |
||||||
|
- **Firebase Crashlytics** - Crash reporting and analytics |
||||||
|
- **Material Design Components** - UI framework |
||||||
|
- **MPAndroidChart** - Data visualization |
||||||
|
- **CameraX** - Image capture functionality |
||||||
|
|
||||||
|
### Testing |
||||||
|
- **JUnit** for unit testing |
||||||
|
- **Android Instrumented Tests** for integration testing |
||||||
|
- Test files located in `app/src/androidTest/` and `app/src/test/` |
||||||
|
|
||||||
|
## Development Guidelines |
||||||
|
|
||||||
|
### Working with Sessions |
||||||
|
- Sessions are the core data model representing individual poker games |
||||||
|
- Use `Session.newInstance()` to create new sessions properly |
||||||
|
- Always call `computeStats()` after modifying session data |
||||||
|
- Sessions can be in various states: PENDING, STARTED, PAUSED, ENDED |
||||||
|
|
||||||
|
### Database Operations |
||||||
|
- Use Realm transactions for data modifications |
||||||
|
- The app uses schema version 14 - increment when making schema changes |
||||||
|
- Migration logic is in `PokerAnalyticsMigration.kt` |
||||||
|
|
||||||
|
### Testing Data |
||||||
|
- Use `FakeDataManager.createFakeSessions()` for generating test data |
||||||
|
- Seed data is available through the `Seed` class |
||||||
|
|
||||||
|
### Build Variants |
||||||
|
- **standard** - Main production flavor |
||||||
|
- Release builds are optimized and obfuscated with ProGuard |
||||||
|
|
||||||
|
## Performance Considerations |
||||||
|
- Sessions use `ComputableResult` for pre-computed statistics |
||||||
|
- Large datasets are handled with Realm's lazy loading |
||||||
|
- Chart rendering is optimized for large data sets |
||||||
|
- Background processing uses Kotlin Coroutines |
||||||
|
|
||||||
|
## Security & Privacy |
||||||
|
- Sensitive data is encrypted in Realm database |
||||||
|
- Crash logging excludes personal information |
||||||
|
- Backup functionality includes data encryption |
||||||
Loading…
Reference in new issue