A modern Android timer application with a minimalist design that provides powerful timing capabilities.
-
Multiple Timer Types:
- 🕒 Countdown Timers: Set timers for specific durations
- ⏱️ Stopwatch: Track elapsed time with lap functionality
- 📅 Date Countdown: Count down to specific dates and times
-
Advanced Timer Features:
- ⛓️ Cascading Timers: Chain multiple timers to run sequentially (perfect for workouts)
- 🔄 Repeating Timers: Set timers that automatically restart
- 📝 Custom Timer Names: Name and categorize your timers
- 🔖 Timer Templates: Save and reuse common timer configurations
-
UI/UX:
- 🧩 Android Widgets: Control timers from your home screen
- 🔒 Lock Screen Controls: Manage timers without unlocking your device
- 🌓 Dark/Light Theme: Toggle between dark and light mode
- 📱 Tab-based Navigation: Separate tabs for different timer types
- MVVM (Model-View-ViewModel) architecture pattern
- Repository Pattern for data management
- Single Activity with multiple fragments using Jetpack Navigation
- Reactive Programming Model with Kotlin Flow
- Core: Kotlin, Jetpack Compose, Material Design 3
- Data: Room Database, DataStore
- Async: Kotlin Coroutines, Flow
- DI: Hilt
- Background: Foreground Service, BroadcastReceivers
For detailed technical information, implementation decisions, and current development status, please refer to the Ledger.md file.
- Android Studio: Arctic Fox (2021.3.1) or newer (Iguana 2023.2.1 recommended)
- Kotlin: 1.9.0 or newer with Coroutines support
- Gradle: 8.0 or newer with Kotlin DSL
- Android SDK:
- Minimum SDK: 26 (Android 8.0 Oreo)
- Target SDK: 34 (Android 14)
- Java Development Kit: JDK 17
- Git: For version control
-
Clone the repository:
git clone https://github.com/r-bit-rry/LastTimer.git cd LastTimer
-
Open the project in Android Studio:
- Launch Android Studio
- Select "Open an existing project"
- Navigate to the cloned directory
-
Configure local properties:
- Create a
local.properties
file in the root directory if not automatically created - Add SDK location:
sdk.dir=/path/to/your/Android/sdk
- Create a
-
Sync Gradle files:
- Click the "Sync Project with Gradle Files" button in Android Studio
- Wait for the sync to complete and indexing to finish
-
Setup environment:
- Ensure you have Android SDK 34 installed via SDK Manager
- Install any missing Android SDK components when prompted
The project includes several build variants:
- debug: Development build with logging and StrictMode enabled
- release: Production build with optimizations
- benchmark: Special build for performance testing
- Unit Tests:
./gradlew test
- Instrumented Tests:
./gradlew connectedAndroidTest
- All Tests:
./gradlew testDebugUnitTest connectedDebugAndroidTest
To build a debug APK:
./gradlew assembleDebug
To build a release APK:
./gradlew assembleRelease
The built APKs can be found in:
- Debug:
app/build/outputs/apk/debug/app-debug.apk
- Release:
app/build/outputs/apk/release/app-release.apk
- Use Logcat with tag filter:
LastTimer
- Check timer service status:
adb shell dumpsys activity services com.lasttimer.app.service.TimerService
- Monitor memory:
adb shell dumpsys meminfo com.lasttimer.app
The project uses GitHub Actions for CI/CD with:
- Pull Request Validation
- Nightly Builds
- Manual Release Builds
For detailed information about the release process, please see the Ledger.md file.
We welcome contributions to LastTimer! Before contributing, please read our Contributing Guidelines for information on our development workflow, coding standards, and pull request process.
- README.md: Project overview and getting started (this file)
- CONTRIBUTING.md: Guidelines for contributing to the project
- Ledger.md: Detailed technical information, development roadmap, and current tasks
This project is licensed under the MIT License - see the LICENSE file for details.
- Room: Database ORM from Android Architecture Components
- Hilt: Dependency injection by Google
- Material Components: UI components following Material Design
- Kotlin Coroutines: Asynchronous programming library
- Compose: Declarative UI toolkit
For questions, issues, or contributions, please:
- Check existing Issues before creating new ones
- Use the Discussions tab for general questions