An Android application for developer productivity analytics. Connects to a Chronova server to display coding statistics including language usage, project time, editor activity, and real-time heartbeats.
- Dashboard Overview - Summary cards with pie charts and activity graphs
- Language Statistics - Track time spent in different programming languages
- Project Analytics - View coding time per project
- Editor Usage - Monitor which editors/IDEs you use most
- File Activity - Recent file activity tracking
- Multiple Time Ranges - View stats for Today, 7 Days, or 30 Days
- Offline Support - Caches authentication and server settings
Screenshots will be added here
┌─────────────────────────────────────┐
│ UI Layer │
│ Activities, Fragments, Adapters │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Repository Layer │
│ ChronovaRepository (SSOT) │
│ - SharedPreferences management │
│ - API calls │
│ - Data transformation │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Data Layer │
│ Retrofit + ChronovaApiService │
│ ApiModels (DTOs) │
└─────────────────────────────────────┘
- Custom MVVM without Architecture Components ViewModels
- Repository Pattern for data management
- Manual Dependency Injection (no DI framework)
- Coroutines with
lifecycleScopefor async operations - ViewBinding for type-safe view access
- Language: Kotlin 2.1.20 (JVM 17)
- Min SDK: 24 (Android 7.0)
- Target SDK: 36 (Android 16)
- Build Tool: Gradle 8.13.2
| Category | Libraries |
|---|---|
| Android Core | AppCompat 1.7.1, Material 1.13.0, ConstraintLayout 2.2.1 |
| Navigation | Navigation KTX 2.9.6 |
| Lifecycle | ViewModel 2.10.0, LiveData 2.9.4 |
| Networking | Retrofit 3.0.0, Gson Converter, OkHttp Logging 5.3.2 |
| Charts | MPAndroidChart 3.1.0 |
| UI | RecyclerView 1.4.0, ViewPager2 1.1.0 |
| Storage | Preference KTX 1.2.1 |
- Android Studio Ladybug (2024.2.1) or newer
- JDK 17 or higher
- Android SDK with API 36
- Clone the repository:
git clone <repository-url>
cd chronova-android- Open in Android Studio or build via command line:
./gradlew assembleDebug- Install the APK:
adb install app/build/outputs/apk/debug/app-debug.apkFor CI/CD or containerized builds:
./docker-build.sh- First Launch: Enter your Chronova server URL and API key
- Login: Authenticate with your Chronova credentials
- Dashboard: View summary statistics and charts
- Navigation: Use bottom navigation to switch between views:
- Dashboard - Overview with charts
- Languages - Programming language breakdown
- Projects - Time per project
- Editors - IDE/editor usage
- Files - Recent file activity
Default server: https://chronova.dev/
You can configure a custom Chronova server in Settings.
app/src/main/java/com/chronova/app/
├── data/
│ ├── ApiClient.kt # Retrofit singleton
│ ├── ApiModels.kt # Data classes
│ ├── ChronovaApiService.kt # API interface
│ └── ChronovaRepository.kt # Repository (SSOT)
├── ui/
│ ├── main/
│ │ ├── cards/ # Dashboard card components
│ │ │ ├── CardsAdapter.kt
│ │ │ ├── CardsList.kt
│ │ │ └── viewholders/
│ │ ├── MainStatsFragment.kt
│ │ └── MainPagerFragment.kt
│ ├── DashboardFragment.kt
│ ├── ProjectsFragment.kt
│ ├── LanguagesFragment.kt
│ ├── EditorsFragment.kt
│ ├── FilesFragment.kt
│ └── [Various Adapters]
├── LoginActivity.kt
└── MainActivity.kt
The app communicates with a Chronova server using REST APIs:
interface ChronovaApiService {
@POST("api/auth/login")
suspend fun login(@Body request: LoginRequest): LoginResponse
@GET("api/dashboard")
suspend fun getDashboard(@Header("Authorization") apiKey: String): DashboardResponse
@GET("api/stats")
suspend fun getStats(@Query("range") range: String): StatsResponse
// ... additional endpoints
}All API calls return Result<T> for type-safe error handling.
./gradlew assembleDebugOutput: app/build/outputs/apk/debug/app-debug.apk
./gradlew assembleReleaseOutput: app/build/outputs/apk/release/app-release.apk
The release build uses a pre-configured keystore for signing.
Note: No tests are currently implemented. The project includes test dependencies:
- JUnit 4.13.2
- Espresso 3.7.0
To add tests, place them in:
src/test/- Unit testssrc/androidTest/- Instrumented tests
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing code style and patterns
- Use ViewBinding for all view references
- Return
Result<T>from Repository methods - Use
lifecycleScopefor coroutines in Fragments - Clear
_bindinginonDestroyView()
This project is licensed under the MIT License - see the LICENSE file for details.
- MPAndroidChart - Chart library
- Retrofit - HTTP client
- Material Design Components - UI components
For detailed developer documentation, see:
AGENTS.md- Quick reference for AI agents.opencode/instructions/llms.md- Comprehensive LLM guide