A modern weather application built with Jetpack Compose that provides current weather conditions, forecasts, and air quality information.
- Current Weather: View today's temperature and weather conditions
- 5-Day Forecast: See weather predictions for the next 4 days
- Air Quality Index: Monitor air pollution levels
- Multiple Cities: Search and save your favorite locations
- Multi-language Support: Available in English, Hindi, and Hebrew
- Material 3 Design: Modern UI with dynamic theming
- Location-based Weather: Automatic weather updates based on your current location
The app follows Clean Architecture principles with MVVM pattern:
┌─────────────────────────┐
│ │
│ Presentation Layer │
│ │
└───────────┬─────────────┘
│
│ ViewModel calls Use Cases
▼
┌─────────────────────────┐
│ │
│ Domain Layer │
│ │
└───────────┬─────────────┘
│
│ Use Cases call Repository
▼
┌─────────────────────────┐
│ │
│ Data Layer │
│ │
└───────────┬─────────────┘
│
│ Repository calls API/Storage
▼
┌─────────────────────────┐
│ │
│ External Data Sources │
│ │
└─────────────────────────┘
┌───────────────┐ API Data ┌───────────────┐ Network ┌───────────────┐
│ │────────────────> │ │────────────────>│ │
│ Androidplay │ │ Network │ │ Network │
│ API │ │ Module │ │ Repository │
└───────────────┘ └───────────────┘ └───────┬───────┘
│
│ Network Models
│
▼
┌───────────────┐ Cache ┌───────────────┐ Entities ┌───────────────┐
│ │◄──────────────>│ │<────────────────>│ │
│ Local DB │ │ Storage │ │ Repository │
│ │ │ Module │ │ │
└───────────────┘ └───────────────┘ └───────┬───────┘
│
│ Domain Models
│
▼
┌───────────────┐
│ │
│ Use Cases │
│ │
└───────┬───────┘
│
│ View States
│
▼
┌───────────────┐
│ │
│ ViewModel │
│ │
└───────┬───────┘
│
│ UI Events
│
▼
┌───────────────┐
│ │
│ Compose UI │
│ │
└───────────────┘
- App language change implemented using Per App Language Preference
- Material 3 migration
- Added dynamic theme
POC-1.webm
-
UI Framework:
- Jetpack Compose with Material 3
- Compose Navigation
- Compose Permissions
- Lottie Compose for animations
- Coil Compose for image loading
- Custom Sunrise/Sunset animation UI
-
Architecture:
- MVVM (Model-View-ViewModel)
- Clean Architecture (Presentation, Domain, Data layers)
- Multi-module project structure
- Kotlin Multiplatform Mobile (KMM) for shared code
-
Concurrency & Reactive Programming:
- Kotlin Coroutines
- Flow
- StateFlow for UI state management
-
Dependency Injection:
- Hilt for Android
- Koin for KMM modules
-
Networking:
- Ktor client
- Kotlinx Serialization
- Content negotiation
-
Local Storage:
- Room Database
- DataStore Preferences
- Kotlinx DateTime
-
Testing:
- JUnit for unit tests
- Turbine for Flow testing
- Mockk and Mockito for mocking
- Espresso for UI testing
-
Firebase:
- Analytics
- Remote Config
- Performance Monitoring
-
Other Tools & Libraries:
- Timber for logging
- LeakCanary for memory leak detection
- In-app updates
- Splash Screen API
- Dynamic theming
- Multi-language support
-
Clone the repository
git clone https://github.com/bosankus/Compose-Weatherify.git
-
Open the project in Android Studio
-
Get an API key from OpenWeatherMap
-
Add your API key to
local.properties:OPEN_WEATHER_API_KEY=your_api_key_here -
Build and run the app
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat/bug/refactor/migrate/update:Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request