# ️ Weather Forecast Android App
**Weather App** is a modern Android application that provides real-time weather updates and forecasts. Users can view local weather based on GPS, search for cities, mark favorite locations, and receive alerts for specific weather conditions — all built with Jetpack Compose and powered by clean MVVM architecture.
## Features
- **GPS Location**: Detects current location for instant weather updates
- **Search City**: Find cities via search or select via interactive map
- ⭐ **Favorite Cities**: Add cities to favorites and view their forecast anytime
- ️ **Weather Details**: Temperature, humidity, wind, conditions (rain, snow, fog, etc.)
- **Custom Alerts**: Set alerts for rain, snow, fog, wind, and extreme temps
- **OpenStreetMap Integration**: Map-based city selection
- **Offline Support**: View saved data without internet
- **Background Sync**: Keep data updated using WorkManager
- **Jetpack Compose**: Modern UI with reactive components
- ? **ViewModel Unit Testing** for reliability
---
## ? Architecture
The app uses **MVVM Architecture** with a focus on testability and separation of concerns:
- **Jetpack Compose** for UI
- **Retrofit** for API integration
- **Room** for local storage
- **WorkManager** for background tasks
- **Coroutines** for async operations
- **LiveData/StateFlow** for UI state management
---
## ? Tech Stack
| Tool/Library | Purpose |
|---------------------|-------------------------------|
| Jetpack Compose | UI Toolkit |
| Room | Offline Database |
| Retrofit | API Networking |
| Coroutines | Async Operations |
| WorkManager | Periodic Background Sync |
| OpenStreetMap | Location Selection |
| Android Location | GPS-based Weather |
| ViewModel + LiveData| State & Logic |
| Gson / Moshi | JSON Parsing |
| JUnit / Mockito | Unit Testing |
---
## Location & Maps
- Uses Android Location APIs to get user's location
- OpenStreetMap (OSM) for map UI and city pin selection
- Favorite cities are stored and displayed with their weather info