Skip to content

Commit 1eed829

Browse files
committed
Revert "Execute CLLocationManager locationServicesEnabled async"
This reverts commit 82e178f.
1 parent 82e178f commit 1eed829

File tree

3 files changed

+109
-121
lines changed

3 files changed

+109
-121
lines changed

ios/LocationAccuracy/RNPermissionHandlerLocationAccuracy.m

Lines changed: 59 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -23,31 +23,29 @@ + (NSString * _Nonnull)handlerUniqueId {
2323
- (void)checkWithResolver:(RCTPromiseResolveBlock _Nonnull)resolve
2424
rejecter:(RCTPromiseRejectBlock _Nonnull)reject {
2525
if (@available(iOS 14, *)) {
26-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
27-
if (![CLLocationManager locationServicesEnabled]) {
28-
return reject(@"cannot_check_location_accuracy", @"Location services are disabled", nil);
29-
}
30-
31-
switch ([CLLocationManager authorizationStatus]) {
32-
case kCLAuthorizationStatusNotDetermined:
33-
return reject(@"cannot_check_location_accuracy", @"Location permission hasn't been requested first", nil);
34-
case kCLAuthorizationStatusRestricted:
35-
case kCLAuthorizationStatusDenied:
36-
return reject(@"cannot_check_location_accuracy", @"Location permission has been blocked by the user", nil);
37-
case kCLAuthorizationStatusAuthorizedWhenInUse:
38-
case kCLAuthorizationStatusAuthorizedAlways:
39-
break;
40-
}
41-
42-
CLLocationManager *locationManager = [CLLocationManager new];
43-
44-
switch (locationManager.accuracyAuthorization) {
45-
case CLAccuracyAuthorizationFullAccuracy:
46-
return resolve(@"full");
47-
case CLAccuracyAuthorizationReducedAccuracy:
48-
return resolve(@"reduced");
49-
}
50-
});
26+
if (![CLLocationManager locationServicesEnabled]) {
27+
return reject(@"cannot_check_location_accuracy", @"Location services are disabled", nil);
28+
}
29+
30+
switch ([CLLocationManager authorizationStatus]) {
31+
case kCLAuthorizationStatusNotDetermined:
32+
return reject(@"cannot_check_location_accuracy", @"Location permission hasn't been requested first", nil);
33+
case kCLAuthorizationStatusRestricted:
34+
case kCLAuthorizationStatusDenied:
35+
return reject(@"cannot_check_location_accuracy", @"Location permission has been blocked by the user", nil);
36+
case kCLAuthorizationStatusAuthorizedWhenInUse:
37+
case kCLAuthorizationStatusAuthorizedAlways:
38+
break;
39+
}
40+
41+
CLLocationManager *locationManager = [CLLocationManager new];
42+
43+
switch (locationManager.accuracyAuthorization) {
44+
case CLAccuracyAuthorizationFullAccuracy:
45+
return resolve(@"full");
46+
case CLAccuracyAuthorizationReducedAccuracy:
47+
return resolve(@"reduced");
48+
}
5149
} else {
5250
reject(@"cannot_check_location_accuracy", @"Only available on iOS 14 or higher", nil);
5351
}
@@ -57,45 +55,43 @@ - (void)requestWithPurposeKey:(NSString * _Nonnull)purposeKey
5755
resolver:(RCTPromiseResolveBlock _Nonnull)resolve
5856
rejecter:(RCTPromiseRejectBlock _Nonnull)reject {
5957
if (@available(iOS 14, *)) {
60-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
61-
if (![CLLocationManager locationServicesEnabled]) {
62-
return reject(@"cannot_request_location_accuracy", @"Location services are disabled", nil);
63-
}
64-
65-
switch ([CLLocationManager authorizationStatus]) {
66-
case kCLAuthorizationStatusNotDetermined:
67-
return reject(@"cannot_request_location_accuracy", @"Location permission hasn't been requested first", nil);
68-
case kCLAuthorizationStatusRestricted:
69-
case kCLAuthorizationStatusDenied:
70-
return reject(@"cannot_request_location_accuracy", @"Location permission has been blocked by the user", nil);
71-
case kCLAuthorizationStatusAuthorizedWhenInUse:
72-
case kCLAuthorizationStatusAuthorizedAlways:
73-
break;
74-
}
75-
76-
CLLocationManager *locationManager = [CLLocationManager new];
77-
78-
switch (locationManager.accuracyAuthorization) {
79-
case CLAccuracyAuthorizationFullAccuracy:
80-
return resolve(@"full"); // resolve early if full accuracy is already granted
81-
case CLAccuracyAuthorizationReducedAccuracy:
82-
break;
83-
}
84-
85-
[locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:purposeKey
86-
completion:^(NSError * _Nullable error) {
87-
if (error) {
88-
reject([NSString stringWithFormat:@"%ld", (long)error.code], error.localizedDescription, error);
89-
} else {
90-
switch (locationManager.accuracyAuthorization) {
91-
case CLAccuracyAuthorizationFullAccuracy:
92-
return resolve(@"full");
93-
case CLAccuracyAuthorizationReducedAccuracy:
94-
return resolve(@"reduced");
95-
}
58+
if (![CLLocationManager locationServicesEnabled]) {
59+
return reject(@"cannot_request_location_accuracy", @"Location services are disabled", nil);
60+
}
61+
62+
switch ([CLLocationManager authorizationStatus]) {
63+
case kCLAuthorizationStatusNotDetermined:
64+
return reject(@"cannot_request_location_accuracy", @"Location permission hasn't been requested first", nil);
65+
case kCLAuthorizationStatusRestricted:
66+
case kCLAuthorizationStatusDenied:
67+
return reject(@"cannot_request_location_accuracy", @"Location permission has been blocked by the user", nil);
68+
case kCLAuthorizationStatusAuthorizedWhenInUse:
69+
case kCLAuthorizationStatusAuthorizedAlways:
70+
break;
71+
}
72+
73+
CLLocationManager *locationManager = [CLLocationManager new];
74+
75+
switch (locationManager.accuracyAuthorization) {
76+
case CLAccuracyAuthorizationFullAccuracy:
77+
return resolve(@"full"); // resolve early if full accuracy is already granted
78+
case CLAccuracyAuthorizationReducedAccuracy:
79+
break;
80+
}
81+
82+
[locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:purposeKey
83+
completion:^(NSError * _Nullable error) {
84+
if (error) {
85+
reject([NSString stringWithFormat:@"%ld", (long)error.code], error.localizedDescription, error);
86+
} else {
87+
switch (locationManager.accuracyAuthorization) {
88+
case CLAccuracyAuthorizationFullAccuracy:
89+
return resolve(@"full");
90+
case CLAccuracyAuthorizationReducedAccuracy:
91+
return resolve(@"reduced");
9692
}
97-
}];
98-
});
93+
}
94+
}];
9995
} else {
10096
reject(@"cannot_request_location_accuracy", @"Only available on iOS 14 or higher", nil);
10197
}

ios/LocationAlways/RNPermissionHandlerLocationAlways.m

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,42 +23,38 @@ + (NSString * _Nonnull)handlerUniqueId {
2323

2424
- (void)checkWithResolver:(void (^ _Nonnull)(RNPermissionStatus))resolve
2525
rejecter:(void (__unused ^ _Nonnull)(NSError * _Nonnull))reject {
26-
dispatch_async(dispatch_get_main_queue(), ^{
27-
if (![CLLocationManager locationServicesEnabled]) {
28-
return resolve(RNPermissionStatusNotAvailable);
29-
}
26+
if (![CLLocationManager locationServicesEnabled]) {
27+
return resolve(RNPermissionStatusNotAvailable);
28+
}
3029

31-
switch ([CLLocationManager authorizationStatus]) {
32-
case kCLAuthorizationStatusNotDetermined:
33-
return resolve(RNPermissionStatusNotDetermined);
34-
case kCLAuthorizationStatusRestricted:
35-
return resolve(RNPermissionStatusRestricted);
36-
case kCLAuthorizationStatusAuthorizedWhenInUse:
37-
case kCLAuthorizationStatusDenied:
38-
return resolve(RNPermissionStatusDenied);
39-
case kCLAuthorizationStatusAuthorizedAlways:
40-
return resolve(RNPermissionStatusAuthorized);
41-
}
42-
});
30+
switch ([CLLocationManager authorizationStatus]) {
31+
case kCLAuthorizationStatusNotDetermined:
32+
return resolve(RNPermissionStatusNotDetermined);
33+
case kCLAuthorizationStatusRestricted:
34+
return resolve(RNPermissionStatusRestricted);
35+
case kCLAuthorizationStatusAuthorizedWhenInUse:
36+
case kCLAuthorizationStatusDenied:
37+
return resolve(RNPermissionStatusDenied);
38+
case kCLAuthorizationStatusAuthorizedAlways:
39+
return resolve(RNPermissionStatusAuthorized);
40+
}
4341
}
4442

4543
- (void)requestWithResolver:(void (^ _Nonnull)(RNPermissionStatus))resolve
4644
rejecter:(void (^ _Nonnull)(NSError * _Nonnull))reject {
47-
dispatch_async(dispatch_get_main_queue(), ^{
48-
if (![CLLocationManager locationServicesEnabled]) {
49-
return resolve(RNPermissionStatusNotAvailable);
50-
}
51-
if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusNotDetermined) {
52-
return [self checkWithResolver:resolve rejecter:reject];
53-
}
45+
if (![CLLocationManager locationServicesEnabled]) {
46+
return resolve(RNPermissionStatusNotAvailable);
47+
}
48+
if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusNotDetermined) {
49+
return [self checkWithResolver:resolve rejecter:reject];
50+
}
5451

55-
self->_resolve = resolve;
56-
self->_reject = reject;
52+
_resolve = resolve;
53+
_reject = reject;
5754

58-
self->_locationManager = [CLLocationManager new];
59-
[self->_locationManager setDelegate:self];
60-
[self->_locationManager requestAlwaysAuthorization];
61-
});
55+
_locationManager = [CLLocationManager new];
56+
[_locationManager setDelegate:self];
57+
[_locationManager requestAlwaysAuthorization];
6258
}
6359

6460
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {

ios/LocationWhenInUse/RNPermissionHandlerLocationWhenInUse.m

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,42 +22,38 @@ + (NSString * _Nonnull)handlerUniqueId {
2222

2323
- (void)checkWithResolver:(void (^ _Nonnull)(RNPermissionStatus))resolve
2424
rejecter:(void (__unused ^ _Nonnull)(NSError * _Nonnull))reject {
25-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
26-
if (![CLLocationManager locationServicesEnabled]) {
27-
return resolve(RNPermissionStatusNotAvailable);
28-
}
25+
if (![CLLocationManager locationServicesEnabled]) {
26+
return resolve(RNPermissionStatusNotAvailable);
27+
}
2928

30-
switch ([CLLocationManager authorizationStatus]) {
31-
case kCLAuthorizationStatusNotDetermined:
32-
return resolve(RNPermissionStatusNotDetermined);
33-
case kCLAuthorizationStatusRestricted:
34-
return resolve(RNPermissionStatusRestricted);
35-
case kCLAuthorizationStatusDenied:
36-
return resolve(RNPermissionStatusDenied);
37-
case kCLAuthorizationStatusAuthorizedWhenInUse:
38-
case kCLAuthorizationStatusAuthorizedAlways:
39-
return resolve(RNPermissionStatusAuthorized);
40-
}
41-
});
29+
switch ([CLLocationManager authorizationStatus]) {
30+
case kCLAuthorizationStatusNotDetermined:
31+
return resolve(RNPermissionStatusNotDetermined);
32+
case kCLAuthorizationStatusRestricted:
33+
return resolve(RNPermissionStatusRestricted);
34+
case kCLAuthorizationStatusDenied:
35+
return resolve(RNPermissionStatusDenied);
36+
case kCLAuthorizationStatusAuthorizedWhenInUse:
37+
case kCLAuthorizationStatusAuthorizedAlways:
38+
return resolve(RNPermissionStatusAuthorized);
39+
}
4240
}
4341

4442
- (void)requestWithResolver:(void (^ _Nonnull)(RNPermissionStatus))resolve
4543
rejecter:(void (^ _Nonnull)(NSError * _Nonnull))reject {
46-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
47-
if (![CLLocationManager locationServicesEnabled]) {
48-
return resolve(RNPermissionStatusNotAvailable);
49-
}
50-
if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusNotDetermined) {
51-
return [self checkWithResolver:resolve rejecter:reject];
52-
}
44+
if (![CLLocationManager locationServicesEnabled]) {
45+
return resolve(RNPermissionStatusNotAvailable);
46+
}
47+
if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusNotDetermined) {
48+
return [self checkWithResolver:resolve rejecter:reject];
49+
}
5350

54-
self->_resolve = resolve;
55-
self->_reject = reject;
51+
_resolve = resolve;
52+
_reject = reject;
5653

57-
self->_locationManager = [CLLocationManager new];
58-
[self->_locationManager setDelegate:self];
59-
[self->_locationManager requestWhenInUseAuthorization];
60-
});
54+
_locationManager = [CLLocationManager new];
55+
[_locationManager setDelegate:self];
56+
[_locationManager requestWhenInUseAuthorization];
6157
}
6258

6359
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {

0 commit comments

Comments
 (0)