Change logic for updating gps provider state.

This commit is contained in:
Jimmy Shih
2013-05-15 13:17:45 -07:00
parent bd6f30f320
commit 3291eef752
5 changed files with 26 additions and 68 deletions
@@ -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() {
@@ -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);
}
/**