Wurly is a premium, feature-rich weather application for Android that provides real-time weather updates with a stunning glassmorphism design. Built using the latest Android development standards, Wurly focuses on performance, reliability, and a superior user experience.
- Real-time Weather: Accurate current weather conditions and detailed multi-day forecasts.
- Premium Design: Beautiful Glassmorphism UI components for a modern, high-end feel.
- Offline Support: Robust caching mechanism using Room, allowing access to weather data even without an internet connection.
- Active Alerts: Background weather alerts and synchronization using WorkManager.
- Search & Favorites: Search for any city globally and save your favorites.
- Secure Integration: Sensitive API keys and base URLs are protected using JNI/C++ binary representation.
Wurly is built with a focus on modern Android development practices:
- UI Layer: Jetpack Compose - Modern declarative UI toolkit.
- Asynchrony: Kotlin Coroutines & Flow - For reactive data streams.
- Dependency Injection: Hilt - Standard DI library for Android.
- Networking: Retrofit & Serialization - For API communication and JSON parsing.
- Persistence: Room - SQLite abstraction for local data storage and caching.
- Settings: Jetpack DataStore - Typed preference storage.
- Location: Mapbox Location SDK - High-precision location services.
- Background Jobs: WorkManager - For periodic syncing and alert scheduling.
The project follows Clean Architecture principles to ensure scalability, testability, and maintainability.
- Data: Implementation of repositories, local/remote data sources, and database entities.
- Domain: Pure Kotlin module containing Business logic, Use Cases, and Domain Models.
- Presentation: UI components, State management (MVI/MVVM), and ViewModels.
- Glass Module: A dedicated UI library for Glassmorphism effects.
- Android Studio Ladybug (2024.2.1) or newer.
- JDK 17 or 21.
- NDK & CMake (for C++ key provider).
- Mapbox Token: Add your Mapbox token to
secrets.propertiesin the root directory:MAPBOX_DOWNLOADS_TOKEN=your_mapbox_token_here - OpenWeatherMap API Key: The project uses OpenWeatherMap. Keys are stored in
app/src/main/cpp/keys.cppfor security. You can update them there if needed.
- Clone the repository.
- Open with Android Studio.
- Sync Gradle and run the
:appmodule on an emulator or physical device.
Wurly is built with a strong emphasis on reliability, featuring a comprehensive test suite.
Located in app/src/test/, focusing on business logic and state management:
- ViewModels: Testing UI state transitions and user interaction logic.
- Repositories: Verifying caching strategies and error handling.
- Utils: Custom JUnit rules like
MainDispatcherRule.
Run locally:
./gradlew :app:testDebugUnitTestLocated in app/src/androidTest/, focusing on data persistence:
- Room DAO: Testing database queries and migrations.
- LocalDataSource: Verifying the data mapping layer.
Run on device:
./gradlew :app:connectedDebugAndroidTestThis project is licensed under the Apache License, Version 2.0. See the LICENSE file for details.
