feat: Update location tracking service to disable automatic broadcasting and add manual control; modify settings screen and related files

This commit is contained in:
Janez T
2025-11-14 10:04:57 +01:00
parent cf780ce636
commit 21daa83c1a
6 changed files with 109 additions and 93 deletions

View File

@@ -627,42 +627,6 @@ class _SettingsScreenState extends State<SettingsScreen> {
),
const Divider(),
// Location Settings Section
_buildSectionHeader(
AppLocalizations.of(context)!.locationBroadcasting,
),
// Automatic tracking settings
SwitchListTile(
secondary: const Icon(Icons.location_on),
title: Text(AppLocalizations.of(context)!.autoLocationTracking),
subtitle: Text(
AppLocalizations.of(context)!.automaticallyBroadcastPosition,
),
value: _locationService.isTracking,
onChanged: (value) {
if (value) {
_startBackgroundTracking();
} else {
_stopBackgroundTracking();
}
},
),
if (_locationService.isTracking) ...[
ListTile(
leading: const Icon(Icons.tune),
title: Text(AppLocalizations.of(context)!.configureTracking),
subtitle: Text(
AppLocalizations.of(context)!.distanceAndTimeThresholds,
),
trailing: const Icon(Icons.chevron_right),
onTap: () => _showTrackingConfigDialog(),
),
],
const Divider(),
// About Section
_buildSectionHeader(AppLocalizations.of(context)!.about),
ListTile(

View File

@@ -420,52 +420,11 @@ class LocationTrackingService {
}
/// Check if position should be broadcast based on distance and time thresholds
/// DISABLED: Automatic broadcasting removed - use advert button for manual broadcasts
void _checkAndBroadcast(Position position) {
// If never broadcast before, do it now
if (_lastBroadcastPosition == null || _lastBroadcastTime == null) {
_broadcastPosition(position);
return;
}
// Calculate time since last broadcast
final timeSinceLastBroadcast = DateTime.now().difference(
_lastBroadcastTime!,
);
final secondsSinceLastBroadcast = timeSinceLastBroadcast.inSeconds;
// Calculate distance from last broadcast position
final distanceFromLastBroadcast = Geolocator.distanceBetween(
_lastBroadcastPosition!.latitude,
_lastBroadcastPosition!.longitude,
position.latitude,
position.longitude,
);
debugPrint(
' Distance from last broadcast: ${distanceFromLastBroadcast.toStringAsFixed(1)}m',
);
debugPrint(' Time since last broadcast: ${secondsSinceLastBroadcast}s');
// Broadcast if moved beyond max distance threshold
if (distanceFromLastBroadcast >= maxDistanceMeters) {
debugPrint(
' 📤 Triggering broadcast: exceeded max distance (${maxDistanceMeters}m)',
);
_broadcastPosition(position);
return;
}
// Broadcast if minimum time interval passed AND moved beyond min distance
if (secondsSinceLastBroadcast >= minTimeIntervalSeconds &&
distanceFromLastBroadcast >= minDistanceMeters) {
debugPrint(
' 📤 Triggering broadcast: exceeded min time (${minTimeIntervalSeconds}s) and min distance (${minDistanceMeters}m)',
);
_broadcastPosition(position);
return;
}
debugPrint(' ⏸️ Not broadcasting: thresholds not met');
// Automatic broadcasting disabled
// Use the manual advert button instead
debugPrint(' ⏸️ [LocationTracking] Automatic broadcasting disabled (use advert button)');
}
// ============================================================================