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

Unified Diff: device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java

Issue 2809813002: GeoLocation: add support for GmsCore location provider (Closed)
Patch Set: reillyg@ nit Created 3 years, 8 months 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 side-by-side diff with in-line comments
Download patch
Index: device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java
diff --git a/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java b/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java
index 261ce9dfd3c147140266a3e244010aec30152027..68c4b463f4eeeacfb7cdaed1b4fa5893f7f40de0 100644
--- a/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java
+++ b/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderAndroid.java
@@ -13,6 +13,7 @@ import android.os.Bundle;
import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.VisibleForTesting;
import java.util.List;
@@ -37,17 +38,20 @@ public class LocationProviderAndroid
@Override
public void start(boolean enableHighAccuracy) {
+ ThreadUtils.assertOnUiThread();
unregisterFromLocationUpdates();
registerForLocationUpdates(enableHighAccuracy);
}
@Override
public void stop() {
+ ThreadUtils.assertOnUiThread();
unregisterFromLocationUpdates();
}
@Override
public boolean isRunning() {
+ ThreadUtils.assertOnUiThread();
return mIsRunning;
}
@@ -57,7 +61,7 @@ public class LocationProviderAndroid
// possible that we receive callbacks after unregistering. At this point, the
// native object will no longer exist.
if (mIsRunning) {
- updateNewLocation(location);
+ LocationProviderAdapter.onNewLocationAvailable(location);
}
}
@@ -70,7 +74,12 @@ public class LocationProviderAndroid
@Override
public void onProviderDisabled(String provider) {}
- private void ensureLocationManagerCreated() {
+ @VisibleForTesting
+ public void setLocationManagerForTesting(LocationManager manager) {
+ mLocationManager = manager;
+ }
+
+ private void createLocationManagerIfNeeded() {
if (mLocationManager != null) return;
mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
if (mLocationManager == null) {
@@ -82,7 +91,7 @@ public class LocationProviderAndroid
* Registers this object with the location service.
*/
private void registerForLocationUpdates(boolean enableHighAccuracy) {
- ensureLocationManagerCreated();
+ createLocationManagerIfNeeded();
if (usePassiveOneShotLocation()) return;
assert !mIsRunning;
@@ -103,8 +112,8 @@ public class LocationProviderAndroid
unregisterFromLocationUpdates();
// Propagate an error to JavaScript, this can happen in case of WebView
// when the embedding app does not have sufficient permissions.
- LocationProviderAdapter.newErrorAvailable("application does not have sufficient "
- + "geolocation permissions.");
+ LocationProviderAdapter.newErrorAvailable(
+ "application does not have sufficient geolocation permissions.");
} catch (IllegalArgumentException e) {
Log.e(TAG, "Caught IllegalArgumentException registering for location updates.");
unregisterFromLocationUpdates();
@@ -116,33 +125,26 @@ public class LocationProviderAndroid
* Unregisters this object from the location service.
*/
private void unregisterFromLocationUpdates() {
- if (mIsRunning) {
- mIsRunning = false;
- mLocationManager.removeUpdates(this);
- }
- }
-
- private void updateNewLocation(Location location) {
- LocationProviderAdapter.newLocationAvailable(location.getLatitude(),
- location.getLongitude(), location.getTime() / 1000.0, location.hasAltitude(),
- location.getAltitude(), location.hasAccuracy(), location.getAccuracy(),
- location.hasBearing(), location.getBearing(), location.hasSpeed(),
- location.getSpeed());
+ if (!mIsRunning) return;
+ mIsRunning = false;
+ mLocationManager.removeUpdates(this);
}
private boolean usePassiveOneShotLocation() {
- if (!isOnlyPassiveLocationProviderEnabled()) return false;
+ if (!isOnlyPassiveLocationProviderEnabled()) {
+ return false;
+ }
// Do not request a location update if the only available location provider is
// the passive one. Make use of the last known location and call
- // onLocationChanged directly.
+ // onNewLocationAvailable directly.
final Location location =
mLocationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
if (location != null) {
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
- updateNewLocation(location);
+ LocationProviderAdapter.onNewLocationAvailable(location);
}
});
}
@@ -154,7 +156,7 @@ public class LocationProviderAndroid
* in the system.
*/
private boolean isOnlyPassiveLocationProviderEnabled() {
- List<String> providers = mLocationManager.getProviders(true);
+ final List<String> providers = mLocationManager.getProviders(true);
return providers != null && providers.size() == 1
&& providers.get(0).equals(LocationManager.PASSIVE_PROVIDER);
}

Powered by Google App Engine
This is Rietveld 408576698