break up offline area monopoly

This commit is contained in:
stopflock
2025-08-07 20:52:24 -05:00
parent a2aa71de8f
commit f8b4134bd3
8 changed files with 451 additions and 464 deletions
+16 -3
View File
@@ -4,6 +4,15 @@ A Flutter app for mapping and tagging ALPR-style cameras (and other surveillance
---
## Code Organization
This project uses a modular file/folder structure for maintainability:
- **Settings sections** each live in their own file under `lib/screens/settings_screen_sections/`.
- **Offline map area models, tile logic, and network/camera helpers** are grouped under `lib/services/offline_areas/`.
- The main Settings and OfflineAreaService files are now slim front-ends that delegate logic to these modules.
---
## User Experience & Features
### Map View
@@ -21,14 +30,16 @@ A Flutter app for mapping and tagging ALPR-style cameras (and other surveillance
### Offline Map Areas
- **Download Any Region, Any Zoom:** Save the current map area at any zoom for true offline viewing.
- **Intelligent Tile Management:** World tiles at zooms 14 are permanently available (via a protected offline area). All downloads include accurate tile and storage estimates.
- **Intelligent Tile Management:** World tiles at zooms 14 are permanently available (via a protected offline area). All downloads include accurate tile and storage estimates, and never request duplicate or unnecessary tiles.
- **Robust Downloading:** All tile/download logic uses serial fetching and exponential backoff for network failures, minimizing risk of OSM rate-limits and always respecting API etiquette.
- **No Duplicates:** Only one world area; can be re-downloaded (refreshed) but never deleted or renamed.
- **Camera Cache:** Download areas keep camera points in sync for full offline visibility—except the global area, which never attempts to fetch all world cameras.
- **Settings Management:** Cancel, refresh, or remove downloads as needed. Progress, tile count, storage consumption, and cached camera count always displayed.
### Polished UX Features
### Polished UX & Settings Architecture
- **Permanent global base map:** Coverage for the entire world at zooms 14, always present.
- **Smooth map gestures:** Double-tap to zoom even on markers; pinch zoom; camera popups distinguished from zoom.
- **Modular Settings:** All major settings/queue/offline/camera management UI sections are cleanly separated for extensibility and rapid development.
- **Order-preserving overlays:** Your location is always drawn on top for easy visibility.
- **No more dead ends:** Disabling all profiles is impossible; canceling downloads is clean and instant.
@@ -48,9 +59,11 @@ A Flutter app for mapping and tagging ALPR-style cameras (and other surveillance
## Roadmap
- **COMPLETE**:
- Offline map area download/storage/camera overlay; cancel/retry; fast tile/camera/size estimates.
- Offline map area download/storage/camera overlay; cancel/retry; fast tile/camera/size estimates; exponential backoff and robust retry logic for network outages or rate-limiting.
- Pro-grade map UX (zoom bar, marker tap/double-tap, robust FABs).
- Modularized, maintainable codebase using small service/helper files and section-separated UI components.
- **SOON**:
- "Offline mode" setting: map never hits the network and always provides a fallback tile for every view (no blank maps; graceful offline-first UX).
- Resumable/robust interrupted downloads.
- Further polish for edge cases (queue, error states).
- **LATER**: