- Kotlin 99.2%
- Shell 0.3%
- PowerShell 0.3%
- Dockerfile 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .woodpecker | ||
| app | ||
| docker/emulator | ||
| docs/screenshots | ||
| gradle/wrapper | ||
| scripts | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| build.gradle.kts | ||
| compose.yaml | ||
| Dockerfile.build | ||
| gradle.properties | ||
| gradlew | ||
| LICENSE | ||
| README.md | ||
| settings.gradle.kts | ||
WeatherWall
📥 https://git.olli.info/Oliver/WeatherWall/releases/latest
Android live wallpaper with a low-poly procedural landscape, weather effects, seasonal details, and gyroscope-driven parallax.
No analytics. No internet permission.
Screenshots
Features
- Procedural low-poly terrain with layered hills and mountains
- Dynamic sky with sun, moon, stars, and time-of-day lighting
- Weather effects: rain, snow, hail, lightning, clouds
- Seasonal visuals: flowers, mushrooms, autumn leaves, snow, frost
- Seasonal events: Christmas, New Year, St. Patrick's Day
- Trees, bushes, rivers/lakes, animals, and random wildlife events
- Gyroscope-based parallax
- Deterministic world generation from a stable seed
- Configurable density, clustering, parallax, weather, and terrain settings
- Optimized rendering with bitmap caches and zero per-frame allocation design
Build
Requirements:
- Android 8.0+ / API 26+
- JDK 17
- Gradle 8.13+
OR
- Docker
git clone https://git.olli.info/Oliver/WeatherWall.git
cd WeatherWall
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk
Development
Run unit tests:
./gradlew test
Run lint:
./gradlew lintDebug
Run mutation tests:
./gradlew :app:pitest
Visual renders
Event and scene artwork is reviewed from generated PNGs rather than committed images.
event_renders/ is gitignored and is meant to be rebuilt on demand:
./gradlew :app:testDebugUnitTest --tests '*EventRenderTest' --tests '*SceneScreenshotTest'
Both tests run under Robolectric with native graphics and write to event_renders/:
| Output | Produced by | Shows |
|---|---|---|
<Event>.png, <Event>_full.png |
EventRenderTest.renderEvent |
Best single frame, cropped and full scene |
<Event>_f1..f3.png |
EventRenderTest.renderFrames |
Three points across the event lifetime |
gait/<Event>.png |
EventRenderTest.renderGroundAnimalGaits |
One stride sampled every 100 ms, animal kept centred |
scenes/, contact_sheets/ |
SceneScreenshotTest |
Full scenes across time of day, weather and seeds |
Use the gait sheets to judge leg motion and body attachment — the lifetime frames only show the animal at different screen positions, never at different points of its stride.
Docker
Build the CI image:
docker build -t weatherwall-builder -f Dockerfile.build .
Run tests in Docker:
docker run --rm -v "$PWD":/workspace -w /workspace weatherwall-builder ./gradlew test --no-daemon
Run mutation tests in Docker:
docker run --rm -v "$PWD":/workspace -w /workspace weatherwall-builder ./gradlew :app:pitest --no-daemon