diff --git a/OwnTracks/OwnTracks/LocationManager.h b/OwnTracks/OwnTracks/LocationManager.h index 6d198f53..22fc27c7 100644 --- a/OwnTracks/OwnTracks/LocationManager.h +++ b/OwnTracks/OwnTracks/LocationManager.h @@ -48,6 +48,7 @@ typedef NS_ENUM(NSInteger, LocationMonitoring) { - (void)wakeup; - (void)sleep; - (void)stop; + - (void)startRegion:(CLRegion *)region; - (void)stopRegion:(CLRegion *)region; - (void)resetRegions; @@ -55,5 +56,8 @@ typedef NS_ENUM(NSInteger, LocationMonitoring) { - (BOOL)insideBeaconRegion:(NSString *)identifier; @property (NS_NONATOMIC_IOSONLY, readonly) BOOL insideCircularRegion; - (BOOL)insideCircularRegion:(NSString *)identifier; +@property (readonly, strong, nonatomic) NSMutableDictionary *insideBeaconRegions; +@property (readonly, strong, nonatomic) NSMutableDictionary *insideCircularRegions; + @end diff --git a/OwnTracks/OwnTracks/LocationManager.m b/OwnTracks/OwnTracks/LocationManager.m index 010b2bd5..769d237c 100644 --- a/OwnTracks/OwnTracks/LocationManager.m +++ b/OwnTracks/OwnTracks/LocationManager.m @@ -465,13 +465,13 @@ - (void)locationManager:(CLLocationManager *)manager switch (state) { case CLRegionStateInside: if (![circular containsCoordinate:manager.location.coordinate]) { - DDLogVerbose(@"[LocationManager] didDeterminState false positive!"); + DDLogVerbose(@"[LocationManager] didDetermineState false positive!"); state = CLRegionStateOutside; } break; case CLRegionStateOutside: if ([circular containsCoordinate:manager.location.coordinate]) { - DDLogVerbose(@"[LocationManager] didDeterminState false negative!"); + DDLogVerbose(@"[LocationManager] didDetermineState false negative!"); state = CLRegionStateInside; } break; @@ -494,6 +494,7 @@ - (void)locationManager:(CLLocationManager *)manager DDLogVerbose(@"[LocationManager] didEnterRegion %@", region); if (![self removeHoldDown:region]) { + [self locationManager:manager didDetermineState:CLRegionStateInside forRegion:region]; [self.delegate regionEvent:region enter:YES]; } } @@ -506,6 +507,7 @@ - (void)locationManager:(CLLocationManager *)manager [self removeHoldDown:region]; [self.pendingRegionEvents addObject:[PendingRegionEvent holdDown:region for:3.0 to:self]]; } else { + [self locationManager:manager didDetermineState:CLRegionStateOutside forRegion:region]; [self.delegate regionEvent:region enter:NO]; } } diff --git a/OwnTracks/OwnTracks/OwnTracking.m b/OwnTracks/OwnTracks/OwnTracking.m index 1e2ab44c..510bb87c 100644 --- a/OwnTracks/OwnTracks/OwnTracking.m +++ b/OwnTracks/OwnTracks/OwnTracking.m @@ -420,6 +420,17 @@ - (NSDictionary *)waypointAsJSON:(Waypoint *)waypoint { // [json setValue:@(batteryState) forKey:@"bs"]; //} + NSMutableArray *inRegions = [[NSMutableArray alloc] init]; + for (Region *region in waypoint.belongsTo.hasRegions) { + if (region.share.boolValue) { + if ([LocationManager sharedInstance].insideCircularRegions[region.name] || + [LocationManager sharedInstance].insideBeaconRegions[region.name]) { + [inRegions addObject:region.name]; + } + } + } + json[@"inregions"] = inRegions; + return json; } diff --git a/OwnTracks/OwnTracks/OwnTracksAppDelegate.m b/OwnTracks/OwnTracks/OwnTracksAppDelegate.m index 2cc1cba6..132bfbf0 100644 --- a/OwnTracks/OwnTracks/OwnTracksAppDelegate.m +++ b/OwnTracks/OwnTracks/OwnTracksAppDelegate.m @@ -815,7 +815,9 @@ - (BOOL)handleMessage:(Connection *)connection data:(NSData *)data onTopic:(NSSt to:[NSNumber saveCopy:dictionary[@"to"]]]; } else if ([@"waypoints" saveEqual:dictionary[@"action"]]) { - [self waypoints]; + [self performSelectorOnMainThread:@selector(waypoints) + withObject:nil + waitUntilDone:NO]; } else if ([@"action" saveEqual:dictionary[@"action"]]) { NSString *content = [NSString saveCopy:dictionary[@"content"]];