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() { public boolean isGpsProviderEnabled() {
return myTracksLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); return myTracksLocationManager.isGpsProviderEnabled();
} }
/** /**
@@ -94,23 +94,10 @@ public class DataSource {
* @param listener the listener * @param listener the listener
*/ */
public void registerLocationListener(LocationListener 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 // Listen for GPS location
myTracksLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener); 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 // Listen for network location
try { try {
myTracksLocationManager.requestLocationUpdates( myTracksLocationManager.requestLocationUpdates(
@@ -47,7 +47,6 @@ public interface DataSourceListener {
*/ */
public void notifyLocationChanged(Location location); public void notifyLocationChanged(Location location);
/** /**
* Notifies when the location provider enabled status changes. * Notifies when the location provider enabled status changes.
* *
@@ -55,13 +54,6 @@ public interface DataSourceListener {
*/ */
public void notifyLocationProviderEnabled(boolean enabled); 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. * Notifies when a preference changes.
* *
@@ -25,8 +25,6 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.location.Location; import android.location.Location;
import android.location.LocationListener; import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.util.Log; import android.util.Log;
@@ -101,7 +99,6 @@ public class DataSourceManager {
*/ */
@VisibleForTesting @VisibleForTesting
class CurrentLocationListener implements LocationListener { class CurrentLocationListener implements LocationListener {
@Override @Override
public void onLocationChanged(Location location) { public void onLocationChanged(Location location) {
if (!dataSource.isAllowed()) { if (!dataSource.isAllowed()) {
@@ -111,28 +108,13 @@ public class DataSourceManager {
} }
@Override @Override
public void onProviderDisabled(String provider) { public void onProviderDisabled(String provider) {}
if (!LocationManager.GPS_PROVIDER.equals(provider)) {
return;
}
dataSourceListener.notifyLocationProviderEnabled(false);
}
@Override @Override
public void onProviderEnabled(String provider) { public void onProviderEnabled(String provider) {}
if (!dataSource.isAllowed() || !LocationManager.GPS_PROVIDER.equals(provider)) {
return;
}
dataSourceListener.notifyLocationProviderEnabled(true);
}
@Override @Override
public void onStatusChanged(String provider, int status, Bundle extras) { public void onStatusChanged(String provider, int status, Bundle extras) {}
if (!dataSource.isAllowed() || !LocationManager.GPS_PROVIDER.equals(provider)) {
return;
}
dataSourceListener.notifyLocationProviderAvailable(status == LocationProvider.AVAILABLE);
}
} }
/** /**
@@ -239,7 +221,16 @@ public class DataSourceManager {
// Do nothing. SAMPLED_OUT_POINT_UPDATES is mapped to POINT_UPDATES. // Do nothing. SAMPLED_OUT_POINT_UPDATES is mapped to POINT_UPDATES.
break; break;
case LOCATION: 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; break;
case PREFERENCE: case PREFERENCE:
dataSource.registerOnSharedPreferenceChangeListener(preferenceListener); 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 @Override
public void notifyLocationChanged(final Location location) { public void notifyLocationChanged(final Location location) {
runInHanderThread(new Runnable() { runInHanderThread(new Runnable() {
@@ -26,7 +26,6 @@ import android.database.Cursor;
import android.location.Location; import android.location.Location;
import android.location.LocationListener; import android.location.LocationListener;
import android.location.LocationManager; import android.location.LocationManager;
import android.location.LocationProvider;
import android.net.Uri; import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.util.Log; import android.util.Log;
@@ -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) { public boolean isGpsProviderEnabled() {
return isAllowed ? locationManager.isProviderEnabled(provider) : false; if (!isAllowed) {
} return false;
}
/** String provider = LocationManager.GPS_PROVIDER;
* @see android.location.LocationManager#getProvider(java.lang.String) if (locationManager.getProvider(provider) == null) {
*/ return false;
public LocationProvider getProvider(String name) { }
return isAllowed ? locationManager.getProvider(name) : null; return locationManager.isProviderEnabled(provider);
} }
/** /**