Ad-free Android · Health · com.michael.walkplanner
WalkPlanner
Ad-free Android walk and run route planner. Generate hyper-local loop routes with GPS and OpenStreetMap data, track sessions, and store history offline — no ads on your run.
Completely ad-free — no ads, no trackers, no sponsored clutter.
Ad-free Android app
What is WalkPlanner?
WalkPlanner is an ad-free Android run and walk route planner that uses GPS and OpenStreetMap data to generate loop routes, track active sessions, and store history offline.
Ad-free advantage: Completely ad-free — no ads, no trackers, no sponsored clutter. MichaelSam94 apps are built without banner ads, interstitial ads, or video ad interruptions.
Key capabilities
- Hyper-local loop route generation
- OSMDroid maps with local tile cache
- Active run foreground tracking
- Offline session history
- Completely ad-free outdoor planning
Frequently asked questions
Is WalkPlanner ad-free?
Yes. WalkPlanner is completely ad-free so route planning and active tracking are not interrupted by ads.
How are walking routes generated?
Routes use Overpass/OpenStreetMap graph data with bidirectional A* routing on a local street graph, plus GPS for planning and live tracking.
Is walk history stored offline?
Yes. Completed sessions can be persisted locally, and map tiles can be cached on device.
WalkPlanner is an ad-free Android run and walk route planner that uses GPS and OpenStreetMap data to generate loop routes, track active sessions, and store history offline.
Ad-free: Completely ad-free — no ads, no trackers, no sponsored clutter.
Hyper-local run and walk route planner for Android. WalkPlanner uses GPS and OpenStreetMap data to generate loop routes, tracks active sessions, and stores history offline.
Architecture
presentation/ (Compose screens + ViewModels)
↓
domain/ (use cases, models, repository interfaces — no Android imports)
↓
data/ (Room, Retrofit/Overpass, DataStore, WorkManager, location)- UI: Jetpack Compose + Navigation Compose
- DI: Manual wiring in
WalkPlannerApplication - Maps: OSMDroid with local tile cache (100 MB)
- Routes: Overpass API with Room OSM graph cache (7-day expiry)
- Routing: Bidirectional A* on an adjacency-list street graph with Haversine edge distances and highway safety weights
- Sessions: WorkManager
SaveSessionWorkerpersists completed runs - Active tracking:
ActiveRunForegroundServicewith pause/stop notification actions
Permissions
| Permission | Purpose |
|---|---|
ACCESS_FINE_LOCATION | GPS route planning and live tracking |
ACCESS_COARSE_LOCATION | Fallback when fine location is denied |
FOREGROUND_SERVICE / FOREGROUND_SERVICE_LOCATION | Active run notification |
INTERNET / ACCESS_NETWORK_STATE | Overpass API and connectivity checks |
WAKE_LOCK | Keep CPU awake during active (non-paused) runs |
Run unit tests
./gradlew testDebugUnitTestReports: app/build/reports/tests/testDebugUnitTest/
Key test suites:
DistanceInputValidatorTestRouteMapperTestGenerateRouteUseCaseTestRouteRepositoryImplTest(Robolectric + in-memory Room)ActiveRunViewModelTestLocationRepositoryImplTest
Run instrumented tests
./gradlew connectedDebugAndroidTestCI
GitHub Actions runs ./gradlew assembleDebug and ./gradlew testDebugUnitTest on push/PR to main and develop.