processLocation method
- Location location
Processes a location through privacy zone rules.
Returns a PrivacyZoneResult containing:
- The original location
- The processed location (obfuscated or null if excluded)
- Which zones matched
- Whether it was excluded or obfuscated
Implementation
PrivacyZoneResult processLocation(Location location) {
final matchedZones = <PrivacyZone>[];
// Find all matching enabled zones
for (final zone in enabledZones) {
if (zone.containsLocationObject(location)) {
matchedZones.add(zone);
}
}
if (matchedZones.isEmpty) {
return PrivacyZoneResult(
originalLocation: location,
processedLocation: location,
);
}
// Check for exclude action (takes precedence)
final hasExclude =
matchedZones.any((z) => z.action == PrivacyZoneAction.exclude);
if (hasExclude) {
return PrivacyZoneResult(
originalLocation: location,
processedLocation: null,
matchedZones: matchedZones,
wasExcluded: true,
);
}
// Apply obfuscation using the largest obfuscation radius
final maxObfuscationRadius = matchedZones
.map((z) => z.obfuscationRadius)
.reduce((a, b) => a > b ? a : b);
final obfuscatedLocation = _obfuscateLocation(
location,
maxObfuscationRadius,
);
return PrivacyZoneResult(
originalLocation: location,
processedLocation: obfuscatedLocation,
matchedZones: matchedZones,
wasObfuscated: true,
);
}