diff --git a/extern/GmsApi b/extern/GmsApi index bfae24a1..3dabc130 160000 --- a/extern/GmsApi +++ b/extern/GmsApi @@ -1 +1 @@ -Subproject commit bfae24a17c11d9633fdce4f9b82dff0da4769f8d +Subproject commit 3dabc13028b56c792573743107b2a56f2fdd3148 diff --git a/play-services-core/src/main/java/org/microg/gms/location/GoogleLocationManager.java b/play-services-core/src/main/java/org/microg/gms/location/GoogleLocationManager.java index 726038c8..d394a1ce 100644 --- a/play-services-core/src/main/java/org/microg/gms/location/GoogleLocationManager.java +++ b/play-services-core/src/main/java/org/microg/gms/location/GoogleLocationManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2015 microG Project Team + * Copyright 2013-2017 microG Project Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,11 +22,7 @@ import android.content.Context; import android.location.Location; import android.location.LocationManager; import android.os.RemoteException; -import android.support.v4.content.ContextCompat; -import android.util.Log; -import android.widget.Toast; -import com.google.android.gms.R; import com.google.android.gms.location.ILocationListener; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.internal.FusedLocationProviderResult; @@ -65,7 +61,12 @@ public class GoogleLocationManager implements LocationChangeListener { this.gpsProvider = null; } if (Utils.hasSelfPermissionOrNotify(context, Manifest.permission.ACCESS_COARSE_LOCATION)) { - this.networkProvider = new RealLocationProvider(locationManager, NETWORK_PROVIDER, this); + if (locationManager.getAllProviders().contains(NETWORK_PROVIDER)) { + this.networkProvider = new RealLocationProvider(locationManager, NETWORK_PROVIDER, this); + } else { + // TODO: Add ability to directly contact UnifiedNlp without the system location provider + this.networkProvider = null; + } } else { this.networkProvider = null; } @@ -119,14 +120,12 @@ public class GoogleLocationManager implements LocationChangeListener { networkProvider.addRequest(request); } - public void requestLocationUpdates(LocationRequest request, ILocationListener listener, - String packageName) { + public void requestLocationUpdates(LocationRequest request, ILocationListener listener, String packageName) { requestLocationUpdates(new LocationRequestHelper(context, request, hasFineLocationPermission(), hasCoarseLocationPermission(), packageName, listener)); } - public void requestLocationUpdates(LocationRequest request, PendingIntent intent, - String packageName) { + public void requestLocationUpdates(LocationRequest request, PendingIntent intent, String packageName) { requestLocationUpdates(new LocationRequestHelper(context, request, hasFineLocationPermission(), hasCoarseLocationPermission(), packageName, intent)); } diff --git a/play-services-core/src/main/java/org/microg/gms/location/RealLocationProvider.java b/play-services-core/src/main/java/org/microg/gms/location/RealLocationProvider.java index aa2b211e..c61ef059 100644 --- a/play-services-core/src/main/java/org/microg/gms/location/RealLocationProvider.java +++ b/play-services-core/src/main/java/org/microg/gms/location/RealLocationProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2015 microG Project Team + * Copyright 2013-2017 microG Project Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -63,8 +63,7 @@ public class RealLocationProvider { } }; - public RealLocationProvider(LocationManager locationManager, String name, - LocationChangeListener changeListener) { + public RealLocationProvider(LocationManager locationManager, String name, LocationChangeListener changeListener) { this.locationManager = locationManager; this.name = name; this.changeListener = changeListener; @@ -110,6 +109,7 @@ public class RealLocationProvider { minTime = Math.min(request.locationRequest.getInterval(), minTime); minDistance = Math.min(request.locationRequest.getSmallestDesplacement(), minDistance); } + Log.d(TAG, name + ": requesting location updates. minTime=" + minTime + " minDistance=" + minDistance); if (connected.get()) { if (connectedMinTime != minTime || connectedMinDistance != minDistance) { locationManager.removeUpdates(listener); @@ -119,7 +119,6 @@ public class RealLocationProvider { } else { locationManager.requestLocationUpdates(name, minTime, minDistance, listener, Looper.getMainLooper()); } - Log.d(TAG, name + ": requesting location updates. minTime=" + minTime + " minDistance=" + minDistance); connected.set(true); connectedMinTime = minTime; connectedMinDistance = minDistance;