From c9dd4015f1ff50ce433b036be8459ab1366eb07b Mon Sep 17 00:00:00 2001 From: mkonicek pr tester Date: Mon, 30 Nov 2015 04:25:55 -0800 Subject: [PATCH] Better error handling in Android Geolocation module (PR 2) Summary: Just a testing PR for the shipit bot (please don't close :)) Closes https://github.com/facebook/react-native/pull/4355 Reviewed By: svcscm Differential Revision: D2702784 Pulled By: mkonicek fb-gh-sync-id: 867c65dcea486750ca65a8437b37a0f658538111 --- .../modules/location/LocationModule.java | 50 +++++++++---------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/location/LocationModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/location/LocationModule.java index 188a459056..9973563fc1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/location/LocationModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/location/LocationModule.java @@ -107,28 +107,25 @@ public class LocationModule extends ReactContextBaseJavaModule { Callback error) { LocationOptions locationOptions = LocationOptions.fromReactMap(options); - LocationManager locationManager = - (LocationManager) getReactApplicationContext().getSystemService(Context.LOCATION_SERVICE); - String provider = getValidProvider(locationManager, locationOptions.highAccuracy); - if (provider == null) { - error.invoke("No available location provider."); - return; - } - - Location location = null; try { - location = locationManager.getLastKnownLocation(provider); + LocationManager locationManager = + (LocationManager) getReactApplicationContext().getSystemService(Context.LOCATION_SERVICE); + String provider = getValidProvider(locationManager, locationOptions.highAccuracy); + if (provider == null) { + error.invoke("No available location provider."); + return; + } + Location location = locationManager.getLastKnownLocation(provider); + if (location != null && + SystemClock.currentTimeMillis() - location.getTime() < locationOptions.maximumAge) { + success.invoke(locationToMap(location)); + return; + } + new SingleUpdateRequest(locationManager, provider, locationOptions.timeout, success, error) + .invoke(); } catch (SecurityException e) { throwLocationPermissionMissing(e); } - if (location != null && - SystemClock.currentTimeMillis() - location.getTime() < locationOptions.maximumAge) { - success.invoke(locationToMap(location)); - return; - } - - new SingleUpdateRequest(locationManager, provider, locationOptions.timeout, success, error) - .invoke(); } /** @@ -143,24 +140,23 @@ public class LocationModule extends ReactContextBaseJavaModule { return; } LocationOptions locationOptions = LocationOptions.fromReactMap(options); - LocationManager locationManager = - (LocationManager) getReactApplicationContext().getSystemService(Context.LOCATION_SERVICE); - String provider = getValidProvider(locationManager, locationOptions.highAccuracy); - if (provider == null) { - emitError("No location provider available."); - return; - } try { + LocationManager locationManager = + (LocationManager) getReactApplicationContext().getSystemService(Context.LOCATION_SERVICE); + String provider = getValidProvider(locationManager, locationOptions.highAccuracy); + if (provider == null) { + emitError("No location provider available."); + return; + } if (!provider.equals(mWatchedProvider)) { locationManager.removeUpdates(mLocationListener); locationManager.requestLocationUpdates(provider, 1000, 0, mLocationListener); } + mWatchedProvider = provider; } catch (SecurityException e) { throwLocationPermissionMissing(e); } - - mWatchedProvider = provider; } /**