processLocation method

PrivacyZoneResult processLocation(
  1. 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,
  );
}