A cryptocurrency price tracker for Android built with Kotlin and XML Views. Displays live prices, charts, and details for top coins using the CoinGecko free API.
| List Screen | Detail Screen | Dark Mode |
|---|---|---|
![]() |
![]() |
![]() |
MVVM + Clean Architecture with a single-module package-by-layer structure.
com.premkumar.cryptotrack/
├── data/ # Remote (Ktor) + Local (Room) data sources
│ ├── remote/ # CoinGecko API client, DTOs
│ ├── local/ # Room database, DAO, entities
│ └── repository/ # Repository implementations
├── domain/ # Business logic, no Android dependencies
│ ├── model/ # Plain Kotlin domain models
│ ├── repository/ # Repository interfaces
│ └── usecase/ # Use case classes
├── presentation/ # UI layer (Fragments, ViewModels, XML layouts)
│ ├── splash/ # Splash screen with app logo
│ ├── list/ # Coin list with search, currency selector, theme toggle
│ ├── detail/ # Coin detail with line/candle charts, details card
│ ├── common/ # Shared adapter, formatters, chart marker
│ └── theme/ # Light/Dark mode manager (persisted)
└── di/ # Koin DI modules
| Layer | Technology |
|---|---|
| Language | Kotlin |
| UI | XML Views, Material Components |
| Architecture | MVVM, LiveData, Clean Architecture |
| DI | Koin |
| Networking | Ktor Client (OkHttp engine) |
| Local Cache | Room |
| Image Loading | Coil |
| Charts | MPAndroidChart (LineChart + CandleStickChart) |
| Navigation | Jetpack Navigation Component (single Activity) |
| Loading | Shimmer (Facebook) |
| Theme | Light / Dark / System (persisted via SharedPreferences) |
- Top 100 Coins — Live prices, 24h change, sorted by market cap
- Search — Client-side filter by name or symbol
- Currency Selector — USD, EUR, INR
- Detail Screen — Rank, icon, price, 24h change, chart (line/candle)
- Timeframes — 24H, 7D, 30D, 90D, 1Y
- Chart Tooltip — Tap chart to see exact price + date
- Dark/Light Mode — Toggle via sun/moon icon on list screen
- Offline Support — Cached coin list shown with banner when offline
- Tablet Layout — SlidingPaneLayout master-detail on sw600dp+ (NOt Yet Finished)
- Rate Limit Handling — Friendly Snackbar on CoinGecko 429 errors
No API key required. Clone and build:
git clone <repo-url>
cd CryptoTrack
./gradlew assembleDebugThe app uses CoinGecko's Keyless Public API — no registration needed.
- The free CoinGecko tier is IP-rate-limited; rapid refreshing may trigger 429 errors
- Chart data is fetched on demand and cached only in memory (per ViewModel session)
- Detail screen requires network connectivity (no offline fallback for charts/details)
MIT


