diff --git a/assets/changelog.json b/assets/changelog.json index 1a3bacd..1b45d1a 100644 --- a/assets/changelog.json +++ b/assets/changelog.json @@ -3,7 +3,9 @@ "content": [ "• OSM message notifications - dot appears on Settings button and OSM Account section when you have unread messages on OpenStreetMap", "• Download area max zoom level is now limited to the currently selected tile provider's maximum zoom level", - "• Navigation route planning now prevents selecting start and end locations that are too close together" + "• Navigation route planning now prevents selecting start and end locations that are too close together", + "• Max nodes setting now uses configurable default from dev_config.dart (250 nodes)", + "• Cleaned up internal 'maxCameras' references to use 'maxNodes' terminology consistently" ] }, "1.5.3": { diff --git a/lib/app_state.dart b/lib/app_state.dart index a5a78cd..c45dce7 100644 --- a/lib/app_state.dart +++ b/lib/app_state.dart @@ -142,7 +142,7 @@ class AppState extends ChangeNotifier { // Settings state bool get offlineMode => _settingsState.offlineMode; bool get pauseQueueProcessing => _settingsState.pauseQueueProcessing; - int get maxCameras => _settingsState.maxCameras; + int get maxNodes => _settingsState.maxNodes; UploadMode get uploadMode => _settingsState.uploadMode; FollowMeMode get followMeMode => _settingsState.followMeMode; @@ -567,8 +567,8 @@ class AppState extends ChangeNotifier { } } - set maxCameras(int n) { - _settingsState.maxCameras = n; + set maxNodes(int n) { + _settingsState.maxNodes = n; } Future setUploadMode(UploadMode mode) async { diff --git a/lib/dev_config.dart b/lib/dev_config.dart index 35e0992..b0597d0 100644 --- a/lib/dev_config.dart +++ b/lib/dev_config.dart @@ -127,6 +127,9 @@ const double kNodeProximityWarningDistance = 15.0; // meters - distance threshol // Navigation route planning configuration const double kNavigationMinRouteDistance = 100.0; // meters - minimum distance between start and end points +// Node display configuration +const int kDefaultMaxNodes = 500; // Default maximum number of nodes to render on the map at once + // Map interaction configuration const double kNodeDoubleTapZoomDelta = 1.0; // How much to zoom in when double-tapping nodes (was 1.0) const double kScrollWheelVelocity = 0.01; // Mouse scroll wheel zoom speed (default 0.005) diff --git a/lib/screens/settings/sections/max_nodes_section.dart b/lib/screens/settings/sections/max_nodes_section.dart index 3788d23..51f8a83 100644 --- a/lib/screens/settings/sections/max_nodes_section.dart +++ b/lib/screens/settings/sections/max_nodes_section.dart @@ -16,7 +16,7 @@ class _MaxNodesSectionState extends State { @override void initState() { super.initState(); - final maxNodes = context.read().maxCameras; + final maxNodes = context.read().maxNodes; _controller = TextEditingController(text: maxNodes.toString()); } @@ -33,7 +33,7 @@ class _MaxNodesSectionState extends State { builder: (context, child) { final locService = LocalizationService.instance; final appState = context.watch(); - final current = appState.maxCameras; + final current = appState.maxNodes; final showWarning = current > 1000; return Column( @@ -79,8 +79,8 @@ class _MaxNodesSectionState extends State { ), onFieldSubmitted: (value) { final n = int.tryParse(value) ?? 10; - appState.maxCameras = n; - _controller.text = appState.maxCameras.toString(); + appState.maxNodes = n; + _controller.text = appState.maxNodes.toString(); }, ), ), diff --git a/lib/services/map_data_provider.dart b/lib/services/map_data_provider.dart index 95a7445..3950a32 100644 --- a/lib/services/map_data_provider.dart +++ b/lib/services/map_data_provider.dart @@ -96,7 +96,7 @@ class MapDataProvider { final localNodes = await fetchLocalNodes( bounds: bounds, profiles: profiles, - maxNodes: AppState.instance.maxCameras, + maxNodes: AppState.instance.maxNodes, ); // Check if we need to trigger a new pre-fetch (spatial or temporal) @@ -123,7 +123,7 @@ class MapDataProvider { } /// Bulk/paged node fetch for offline downloads (handling paging, dedup, and Overpass retries) - /// Only use for offline area download, not for map browsing! Ignores maxCameras config. + /// Only use for offline area download, not for map browsing! Ignores maxNodes config. Future> getAllNodesForDownload({ required LatLngBounds bounds, required List profiles, diff --git a/lib/state/settings_state.dart b/lib/state/settings_state.dart index 9d0a170..c07ef32 100644 --- a/lib/state/settings_state.dart +++ b/lib/state/settings_state.dart @@ -18,7 +18,7 @@ enum FollowMeMode { class SettingsState extends ChangeNotifier { static const String _offlineModePrefsKey = 'offline_mode'; - static const String _maxCamerasPrefsKey = 'max_cameras'; + static const String _maxNodesPrefsKey = 'max_nodes'; static const String _uploadModePrefsKey = 'upload_mode'; static const String _tileProvidersPrefsKey = 'tile_providers'; static const String _selectedTileTypePrefsKey = 'selected_tile_type'; @@ -32,7 +32,7 @@ class SettingsState extends ChangeNotifier { bool _offlineMode = false; bool _pauseQueueProcessing = false; - int _maxCameras = 250; + int _maxNodes = kDefaultMaxNodes; UploadMode _uploadMode = kEnableDevelopmentModes ? UploadMode.simulate : UploadMode.production; FollowMeMode _followMeMode = FollowMeMode.follow; bool _proximityAlertsEnabled = false; @@ -45,7 +45,7 @@ class SettingsState extends ChangeNotifier { // Getters bool get offlineMode => _offlineMode; bool get pauseQueueProcessing => _pauseQueueProcessing; - int get maxCameras => _maxCameras; + int get maxNodes => _maxNodes; UploadMode get uploadMode => _uploadMode; FollowMeMode get followMeMode => _followMeMode; bool get proximityAlertsEnabled => _proximityAlertsEnabled; @@ -98,10 +98,8 @@ class SettingsState extends ChangeNotifier { // Load queue processing setting _pauseQueueProcessing = prefs.getBool(_pauseQueueProcessingPrefsKey) ?? false; - // Load max cameras - if (prefs.containsKey(_maxCamerasPrefsKey)) { - _maxCameras = prefs.getInt(_maxCamerasPrefsKey) ?? 250; - } + // Load max nodes + _maxNodes = prefs.getInt(_maxNodesPrefsKey) ?? kDefaultMaxNodes; // Load proximity alerts settings _proximityAlertsEnabled = prefs.getBool(_proximityAlertsEnabledPrefsKey) ?? false; @@ -225,11 +223,11 @@ class SettingsState extends ChangeNotifier { notifyListeners(); } - set maxCameras(int n) { + set maxNodes(int n) { if (n < 10) n = 10; // minimum - _maxCameras = n; + _maxNodes = n; SharedPreferences.getInstance().then((prefs) { - prefs.setInt(_maxCamerasPrefsKey, n); + prefs.setInt(_maxNodesPrefsKey, n); }); notifyListeners(); } diff --git a/lib/widgets/map_view.dart b/lib/widgets/map_view.dart index 1e2ae5f..235f9ac 100644 --- a/lib/widgets/map_view.dart +++ b/lib/widgets/map_view.dart @@ -428,7 +428,7 @@ class MapViewState extends State { }).toList(); // Apply rendering limit to prevent UI lag - final maxNodes = appState.maxCameras; + final maxNodes = appState.maxNodes; if (validNodes.length > maxNodes) { nodesToRender = validNodes.take(maxNodes).toList(); isLimitActive = true; @@ -480,7 +480,7 @@ class MapViewState extends State { ); // Apply same node count limit as surveillance nodes - final maxNodes = appState.maxCameras; + final maxNodes = appState.maxNodes; final limitedSuspectedLocations = suspectedLocations.take(maxNodes).toList(); // Filter out suspected locations that are too close to real nodes