Atmos is a highly robust, modern Android weather application built entirely with Kotlin and Jetpack Compose. Going beyond basic weather forecasting, Atmos features a completely custom, background-resilient Danger Alerting System that can wake up the device and ring native alarms when severe weather thresholds (Heat, Wind, Rain) are crossed.
- Real-Time & Offline Weather: Fetches detailed current, hourly, and daily forecasts. Caches the latest data locally using Room so the app works seamlessly offline.
- Advanced Background Alarms: Users can set custom threshold alerts (e.g., "Wake me up if wind speed exceeds 50 mph"). Powered by
AlarmManager, the app bypasses Doze mode, acquires aWakeLock, and triggers a full-screen alarm over the lock screen—even if the app is fully closed. - Multi-Location Management (Favorites): Save multiple locations, view them in a dedicated list, and sync weather data across all favorite cities simultaneously.
- Granular User Preferences: Highly customizable unit settings (Celsius/Fahrenheit/Kelvin, MPH/m/s), multi-language support, and the ability to toggle between live GPS tracking or a manual static location.
- Modern UI/UX: Built 100% in Jetpack Compose, featuring beautiful gradients, bottom sheets, sliders, and a highly responsive design.
Atmos is built using modern Android development practices and libraries:
- UI: Jetpack Compose for a declarative, reactive UI.
- Architecture: Clean Architecture + MVVM (Model-View-ViewModel) utilizing Kotlin
StateFlowandCoroutines. - Dependency Injection: Koin for lightweight, pragmatic DI.
- Local Storage: * Room Database: For storing offline weather data, saved locations, and user-configured alerts.
- DataStore (Preferences): For securely storing user settings like units and language.
- Networking: Retrofit & OkHttp for REST API communication.
- Background Processing: *
AlarmManager&BroadcastReceiversfor exact-time, wake-up weather alarms.WorkManagerfor deferrable background data syncing.
The codebase is strictly separated into three main layers to enforce separation of concerns:
com.example.atmos
│
├── domain/ # 🧠 The core business logic (No Android dependencies)
│ ├── entity/ # Plain data classes (Weather, Alert, UserPreferences)
│ ├── repository/ # Interfaces for data operations
│ └── usecases/ # Single-responsibility actions (e.g., SyncWeatherUseCase, GetCachedWeatherUseCase)
│
├── data/ # 💾 Data management and API interactions
│ ├── local/ # Room Database, DAOs, and Entities
│ ├── remote/ # Retrofit APIs, DTOs
│ ├── repository/ # Implementations of Domain repositories
│ └── scheduler/ # AlarmManager, BroadcastReceivers, and WorkManager logic
│
└── presentation/ # 📱 UI and State Management
├── design_system/ # Compose Themes, Colors, Fonts
├── home/ # Home Screen & ViewModel
├── alert/ # Weather Alerts Screen, Bottom Sheets, & Alarm UI
└── favorites/ # Saved Locations Screen & ViewModel