# CLAUDE.md - Countdown Timer ## Build & Test Commands - **Build Debug APK**: `./gradlew assembleDebug` - **Build Release APK**: `./gradlew assembleRelease` - **Clean Project**: `./gradlew clean` - **Run Unit Tests**: `./gradlew test` (if applicable) ## Code Style Guidelines - **Language**: Kotlin 1.9.0 - **UI Framework**: Traditional Android View system (XML layouts), **not** Jetpack Compose. - **Naming Conventions**: - Classes: `PascalCase` (e.g., `CountdownDialog`) - Functions/Variables: `camelCase` (e.g., `startTimer()`) - Layout Files: `snake_case` (e.g., `activity_main.xml`) - Resource IDs: `camelCase` (e.g., `btnStart`, `cvCountdown`) - **Android Patterns**: Use `findViewById` for view binding in this project to maintain consistency with existing simple architecture. ## Architecture - **Pattern**: Simple Activity-Dialog architecture. - **State**: The countdown state is managed locally within `CountdownDialog` using `android.os.CountDownTimer`. - **Dependency Management**: Gradle with Groovy DSL. - **Key Constraints**: - The `CountdownDialog` is explicitly set to `setCancelable(false)` and `setCanceledOnTouchOutside(false)` to ensure the timer completes. ## Critical Files Reference - `app/src/main/java/com/example/countdowntimer/MainActivity.kt`: Entry point and trigger for the timer. - `app/src/main/java/com/example/countdowntimer/CountdownDialog.kt`: Implementation of the countdown logic and `ToneGenerator` trigger. - `app/src/main/java/com/example/countdowntimer/CountdownCanvasView.kt`: Custom view for the circular progress ring and countdown text. - `app/src/main/res/layout/activity_main.xml`: Main screen layout. - `app/src/main/res/layout/dialog_countdown.xml`: Timer dialog layout. - `app/build.gradle`: Build configuration, SDK versions (minSdk 24, targetSdk 34), and dependencies.