Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Side by Side Diff: ios/chrome/browser/geolocation/location_manager.mm

Issue 2528003002: [ObjC ARC] Converts ios/chrome/browser/geolocation:geolocation to ARC.Automatically generated ARC… (Closed)
Patch Set: comments, cleanup Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/geolocation/location_manager.h" 5 #import "ios/chrome/browser/geolocation/location_manager.h"
6 6
7 #import "base/ios/weak_nsobject.h"
8 #include "base/mac/scoped_nsobject.h"
9 #import "ios/chrome/browser/geolocation/CLLocation+OmniboxGeolocation.h" 7 #import "ios/chrome/browser/geolocation/CLLocation+OmniboxGeolocation.h"
10 #import "ios/chrome/browser/geolocation/location_manager+Testing.h" 8 #import "ios/chrome/browser/geolocation/location_manager+Testing.h"
11 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h" 9 #import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
12 #import "ios/public/provider/chrome/browser/geolocation_updater_provider.h" 10 #import "ios/public/provider/chrome/browser/geolocation_updater_provider.h"
13 11
12 #if !defined(__has_feature) || !__has_feature(objc_arc)
13 #error "This file requires ARC support."
14 #endif
15
14 namespace { 16 namespace {
15 17
16 const CLLocationDistance kLocationDesiredAccuracy = 18 const CLLocationDistance kLocationDesiredAccuracy =
17 kCLLocationAccuracyHundredMeters; 19 kCLLocationAccuracyHundredMeters;
18 // Number of seconds to wait before automatically stopping location updates. 20 // Number of seconds to wait before automatically stopping location updates.
19 const NSTimeInterval kLocationStopUpdateDelay = 5.0; 21 const NSTimeInterval kLocationStopUpdateDelay = 5.0;
20 // A large value to disable automatic location updates in GeolocationUpdater. 22 // A large value to disable automatic location updates in GeolocationUpdater.
21 const NSTimeInterval kLocationUpdateInterval = 365.0 * 24.0 * 60.0 * 60.0; 23 const NSTimeInterval kLocationUpdateInterval = 365.0 * 24.0 * 60.0 * 60.0;
22 24
23 } // namespace 25 } // namespace
24 26
25 @interface LocationManager () { 27 @interface LocationManager () {
26 base::scoped_nsprotocol<id<GeolocationUpdater>> _locationUpdater; 28 id<GeolocationUpdater> _locationUpdater;
27 base::scoped_nsobject<CLLocation> _currentLocation; 29 NSDate* _startTime;
28 base::WeakNSProtocol<id<LocationManagerDelegate>> _delegate;
29 base::scoped_nsobject<NSDate> _startTime;
30 } 30 }
31 31
32 // Handles GeolocationUpdater notification for an updated device location. 32 // Handles GeolocationUpdater notification for an updated device location.
33 - (void)handleLocationUpdateNotification:(NSNotification*)notification; 33 - (void)handleLocationUpdateNotification:(NSNotification*)notification;
34 // Handles GeolocationUpdater notification for ending device location updates. 34 // Handles GeolocationUpdater notification for ending device location updates.
35 - (void)handleLocationStopNotification:(NSNotification*)notification; 35 - (void)handleLocationStopNotification:(NSNotification*)notification;
36 // Handles GeolocationUpdater notification for changing authorization. 36 // Handles GeolocationUpdater notification for changing authorization.
37 - (void)handleAuthorizationChangeNotification:(NSNotification*)notification; 37 - (void)handleAuthorizationChangeNotification:(NSNotification*)notification;
38 38
39 @end 39 @end
40 40
41 @implementation LocationManager 41 @implementation LocationManager
42 @synthesize delegate = _delegate;
43 @synthesize currentLocation = _currentLocation;
42 44
43 - (id)init { 45 - (id)init {
44 self = [super init]; 46 self = [super init];
45 if (self) { 47 if (self) {
46 ios::GeolocationUpdaterProvider* provider = 48 ios::GeolocationUpdaterProvider* provider =
47 ios::GetChromeBrowserProvider()->GetGeolocationUpdaterProvider(); 49 ios::GetChromeBrowserProvider()->GetGeolocationUpdaterProvider();
48 50
49 // |provider| may be null in tests. 51 // |provider| may be null in tests.
50 if (provider) { 52 if (provider) {
51 _locationUpdater.reset(provider->CreateGeolocationUpdater(false)); 53 _locationUpdater = provider->CreateGeolocationUpdater(false);
52 [_locationUpdater setDesiredAccuracy:kLocationDesiredAccuracy 54 [_locationUpdater setDesiredAccuracy:kLocationDesiredAccuracy
53 distanceFilter:kLocationDesiredAccuracy / 2]; 55 distanceFilter:kLocationDesiredAccuracy / 2];
54 [_locationUpdater setStopUpdateDelay:kLocationStopUpdateDelay]; 56 [_locationUpdater setStopUpdateDelay:kLocationStopUpdateDelay];
55 [_locationUpdater setUpdateInterval:kLocationUpdateInterval]; 57 [_locationUpdater setUpdateInterval:kLocationUpdateInterval];
56 58
57 NSNotificationCenter* defaultCenter = 59 NSNotificationCenter* defaultCenter =
58 [NSNotificationCenter defaultCenter]; 60 [NSNotificationCenter defaultCenter];
59 [defaultCenter addObserver:self 61 [defaultCenter addObserver:self
60 selector:@selector(handleLocationUpdateNotification:) 62 selector:@selector(handleLocationUpdateNotification:)
61 name:provider->GetUpdateNotificationName() 63 name:provider->GetUpdateNotificationName()
62 object:_locationUpdater]; 64 object:_locationUpdater];
63 [defaultCenter addObserver:self 65 [defaultCenter addObserver:self
64 selector:@selector(handleLocationStopNotification:) 66 selector:@selector(handleLocationStopNotification:)
65 name:provider->GetStopNotificationName() 67 name:provider->GetStopNotificationName()
66 object:_locationUpdater]; 68 object:_locationUpdater];
67 [defaultCenter 69 [defaultCenter
68 addObserver:self 70 addObserver:self
69 selector:@selector(handleAuthorizationChangeNotification:) 71 selector:@selector(handleAuthorizationChangeNotification:)
70 name:provider->GetAuthorizationChangeNotificationName() 72 name:provider->GetAuthorizationChangeNotificationName()
71 object:nil]; 73 object:nil];
72 } 74 }
73 } 75 }
74 return self; 76 return self;
75 } 77 }
76 78
77 - (void)dealloc { 79 - (void)dealloc {
78 [[NSNotificationCenter defaultCenter] removeObserver:self]; 80 [[NSNotificationCenter defaultCenter] removeObserver:self];
79 [super dealloc];
80 } 81 }
81 82
82 - (CLAuthorizationStatus)authorizationStatus { 83 - (CLAuthorizationStatus)authorizationStatus {
83 return [CLLocationManager authorizationStatus]; 84 return [CLLocationManager authorizationStatus];
84 } 85 }
85 86
86 - (CLLocation*)currentLocation { 87 - (CLLocation*)currentLocation {
87 if (!_currentLocation) 88 if (!_currentLocation)
88 _currentLocation.reset([[_locationUpdater currentLocation] retain]); 89 _currentLocation = [_locationUpdater currentLocation];
89 return _currentLocation; 90 return _currentLocation;
90 } 91 }
91 92
92 - (id<LocationManagerDelegate>)delegate {
93 return _delegate;
94 }
95
96 - (void)setDelegate:(id<LocationManagerDelegate>)delegate {
97 _delegate.reset(delegate);
98 }
99
100 - (BOOL)locationServicesEnabled { 93 - (BOOL)locationServicesEnabled {
101 return [CLLocationManager locationServicesEnabled]; 94 return [CLLocationManager locationServicesEnabled];
102 } 95 }
103 96
104 - (void)startUpdatingLocation { 97 - (void)startUpdatingLocation {
105 CLLocation* currentLocation = self.currentLocation; 98 CLLocation* currentLocation = self.currentLocation;
106 if (!currentLocation || [currentLocation cr_shouldRefresh]) { 99 if (!currentLocation || [currentLocation cr_shouldRefresh]) {
107 if (![_locationUpdater isEnabled]) 100 if (![_locationUpdater isEnabled])
108 _startTime.reset([[NSDate alloc] init]); 101 _startTime = [[NSDate alloc] init];
109 102
110 [_locationUpdater requestWhenInUseAuthorization]; 103 [_locationUpdater requestWhenInUseAuthorization];
111 [_locationUpdater setEnabled:YES]; 104 [_locationUpdater setEnabled:YES];
112 } 105 }
113 } 106 }
114 107
115 - (void)stopUpdatingLocation { 108 - (void)stopUpdatingLocation {
116 [_locationUpdater setEnabled:NO]; 109 [_locationUpdater setEnabled:NO];
117 } 110 }
118 111
119 #pragma mark - Private 112 #pragma mark - Private
120 113
121 - (void)handleLocationUpdateNotification:(NSNotification*)notification { 114 - (void)handleLocationUpdateNotification:(NSNotification*)notification {
122 NSString* newLocationKey = ios::GetChromeBrowserProvider() 115 NSString* newLocationKey = ios::GetChromeBrowserProvider()
123 ->GetGeolocationUpdaterProvider() 116 ->GetGeolocationUpdaterProvider()
124 ->GetUpdateNewLocationKey(); 117 ->GetUpdateNewLocationKey();
125 CLLocation* location = [[notification userInfo] objectForKey:newLocationKey]; 118 CLLocation* location = [[notification userInfo] objectForKey:newLocationKey];
126 if (location) { 119 if (location) {
127 _currentLocation.reset([location retain]); 120 _currentLocation = location;
128 121
129 if (_startTime) { 122 if (_startTime) {
130 NSTimeInterval interval = -[_startTime timeIntervalSinceNow]; 123 NSTimeInterval interval = -[_startTime timeIntervalSinceNow];
131 [_currentLocation cr_setAcquisitionInterval:interval]; 124 [_currentLocation cr_setAcquisitionInterval:interval];
132 } 125 }
133 } 126 }
134 } 127 }
135 128
136 - (void)handleLocationStopNotification:(NSNotification*)notification { 129 - (void)handleLocationStopNotification:(NSNotification*)notification {
137 [_locationUpdater setEnabled:NO]; 130 [_locationUpdater setEnabled:NO];
138 } 131 }
139 132
140 - (void)handleAuthorizationChangeNotification:(NSNotification*)notification { 133 - (void)handleAuthorizationChangeNotification:(NSNotification*)notification {
141 [_delegate locationManagerDidChangeAuthorizationStatus:self]; 134 [_delegate locationManagerDidChangeAuthorizationStatus:self];
142 } 135 }
143 136
144 #pragma mark - LocationManager+Testing 137 #pragma mark - LocationManager+Testing
145 138
146 - (void)setGeolocationUpdater:(id<GeolocationUpdater>)geolocationUpdater { 139 - (void)setGeolocationUpdater:(id<GeolocationUpdater>)geolocationUpdater {
147 _locationUpdater.reset([geolocationUpdater retain]); 140 _locationUpdater = geolocationUpdater;
148 } 141 }
149 142
150 @end 143 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698