forked from upstream-mirrors/OpenTracks
Change logic for updating gps provider state.
This commit is contained in:
@@ -66,7 +66,7 @@ public class DataSource {
|
||||
}
|
||||
|
||||
public boolean isGpsProviderEnabled() {
|
||||
return myTracksLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
|
||||
return myTracksLocationManager.isGpsProviderEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -94,23 +94,10 @@ public class DataSource {
|
||||
* @param listener the listener
|
||||
*/
|
||||
public void registerLocationListener(LocationListener listener) {
|
||||
// Check if the GPS provider exists
|
||||
if (myTracksLocationManager.getProvider(LocationManager.GPS_PROVIDER) == null) {
|
||||
listener.onProviderDisabled(LocationManager.GPS_PROVIDER);
|
||||
unregisterLocationListener(listener);
|
||||
return;
|
||||
}
|
||||
|
||||
// Listen for GPS location
|
||||
myTracksLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
|
||||
|
||||
// Update the listener with the current provider state
|
||||
if (myTracksLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
|
||||
listener.onProviderEnabled(LocationManager.GPS_PROVIDER);
|
||||
} else {
|
||||
listener.onProviderDisabled(LocationManager.GPS_PROVIDER);
|
||||
}
|
||||
|
||||
// Listen for network location
|
||||
try {
|
||||
myTracksLocationManager.requestLocationUpdates(
|
||||
|
||||
@@ -46,8 +46,7 @@ public interface DataSourceListener {
|
||||
* @param location the location
|
||||
*/
|
||||
public void notifyLocationChanged(Location location);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Notifies when the location provider enabled status changes.
|
||||
*
|
||||
@@ -55,13 +54,6 @@ public interface DataSourceListener {
|
||||
*/
|
||||
public void notifyLocationProviderEnabled(boolean enabled);
|
||||
|
||||
/**
|
||||
* Notifies when the location provider availability status changes.
|
||||
*
|
||||
* @param available true if available, false if not
|
||||
*/
|
||||
public void notifyLocationProviderAvailable(boolean available);
|
||||
|
||||
/**
|
||||
* Notifies when a preference changes.
|
||||
*
|
||||
|
||||
@@ -25,8 +25,6 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||
import android.database.ContentObserver;
|
||||
import android.location.Location;
|
||||
import android.location.LocationListener;
|
||||
import android.location.LocationManager;
|
||||
import android.location.LocationProvider;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
@@ -101,7 +99,6 @@ public class DataSourceManager {
|
||||
*/
|
||||
@VisibleForTesting
|
||||
class CurrentLocationListener implements LocationListener {
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(Location location) {
|
||||
if (!dataSource.isAllowed()) {
|
||||
@@ -111,28 +108,13 @@ public class DataSourceManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProviderDisabled(String provider) {
|
||||
if (!LocationManager.GPS_PROVIDER.equals(provider)) {
|
||||
return;
|
||||
}
|
||||
dataSourceListener.notifyLocationProviderEnabled(false);
|
||||
}
|
||||
public void onProviderDisabled(String provider) {}
|
||||
|
||||
@Override
|
||||
public void onProviderEnabled(String provider) {
|
||||
if (!dataSource.isAllowed() || !LocationManager.GPS_PROVIDER.equals(provider)) {
|
||||
return;
|
||||
}
|
||||
dataSourceListener.notifyLocationProviderEnabled(true);
|
||||
}
|
||||
public void onProviderEnabled(String provider) {}
|
||||
|
||||
@Override
|
||||
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||
if (!dataSource.isAllowed() || !LocationManager.GPS_PROVIDER.equals(provider)) {
|
||||
return;
|
||||
}
|
||||
dataSourceListener.notifyLocationProviderAvailable(status == LocationProvider.AVAILABLE);
|
||||
}
|
||||
public void onStatusChanged(String provider, int status, Bundle extras) {}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -239,7 +221,16 @@ public class DataSourceManager {
|
||||
// Do nothing. SAMPLED_OUT_POINT_UPDATES is mapped to POINT_UPDATES.
|
||||
break;
|
||||
case LOCATION:
|
||||
dataSource.registerLocationListener(currentLocationListener);
|
||||
if (dataSource.isGpsProviderEnabled()) {
|
||||
dataSourceListener.notifyLocationProviderEnabled(true);
|
||||
} else {
|
||||
dataSourceListener.notifyLocationProviderEnabled(false);
|
||||
}
|
||||
if (dataSource.isAllowed()) {
|
||||
dataSource.registerLocationListener(currentLocationListener);
|
||||
} else {
|
||||
dataSource.unregisterLocationListener(currentLocationListener);
|
||||
}
|
||||
break;
|
||||
case PREFERENCE:
|
||||
dataSource.registerOnSharedPreferenceChangeListener(preferenceListener);
|
||||
|
||||
@@ -370,17 +370,6 @@ public class TrackDataHub implements DataSourceListener {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyLocationProviderAvailable(final boolean available) {
|
||||
runInHanderThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
hasFix = available;
|
||||
notifyLocationStateChanged(trackDataManager.getListeners(TrackDataType.LOCATION));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyLocationChanged(final Location location) {
|
||||
runInHanderThread(new Runnable() {
|
||||
|
||||
+11
-12
@@ -26,7 +26,6 @@ import android.database.Cursor;
|
||||
import android.location.Location;
|
||||
import android.location.LocationListener;
|
||||
import android.location.LocationManager;
|
||||
import android.location.LocationProvider;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
@@ -77,7 +76,7 @@ public class MyTracksLocationManager {
|
||||
|
||||
/**
|
||||
* Observer for Google location settings.
|
||||
*
|
||||
*
|
||||
* @author Jimmy Shih
|
||||
*/
|
||||
private class GoogleSettingsObserver extends ContentObserver {
|
||||
@@ -102,17 +101,17 @@ public class MyTracksLocationManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see android.location.LocationManager#isProviderEnabled(java.lang.String)
|
||||
* Returns true if gps provider is enabled.
|
||||
*/
|
||||
public boolean isProviderEnabled(String provider) {
|
||||
return isAllowed ? locationManager.isProviderEnabled(provider) : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see android.location.LocationManager#getProvider(java.lang.String)
|
||||
*/
|
||||
public LocationProvider getProvider(String name) {
|
||||
return isAllowed ? locationManager.getProvider(name) : null;
|
||||
public boolean isGpsProviderEnabled() {
|
||||
if (!isAllowed) {
|
||||
return false;
|
||||
}
|
||||
String provider = LocationManager.GPS_PROVIDER;
|
||||
if (locationManager.getProvider(provider) == null) {
|
||||
return false;
|
||||
}
|
||||
return locationManager.isProviderEnabled(provider);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user