auto import from //depot/cupcake/@136594
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index 9d69114..e48e047 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -221,6 +221,9 @@
// Wifi Manager
private WifiManager mWifiManager;
+ private int mNetworkState = LocationProvider.TEMPORARILY_UNAVAILABLE;
+ private boolean mWifiEnabled = false;
+
/**
* A wrapper class holding either an ILocationListener or a PendingIntent to receive
* location updates.
@@ -597,16 +600,6 @@
// Create a wifi lock for future use
mWifiLock = getWifiWakelockLocked();
-
- // There might be an existing wifi scan available
- if (mWifiManager != null) {
- List<ScanResult> wifiScanResults = mWifiManager.getScanResults();
- if (wifiScanResults != null && wifiScanResults.size() != 0) {
- if (mNetworkLocationInterface != null) {
- mNetworkLocationInterface.updateWifiScanResults(wifiScanResults);
- }
- }
- }
}
public void setInstallCallback(InstallCallback callback) {
@@ -625,6 +618,31 @@
mNetworkLocationProvider = (LocationProviderImpl)provider;
LocationProviderImpl.addProvider(mNetworkLocationProvider);
updateProvidersLocked();
+
+ // notify NetworkLocationProvider of any events it might have missed
+ synchronized (mLocationListeners) {
+ mNetworkLocationProvider.updateNetworkState(mNetworkState);
+ mNetworkLocationInterface.updateWifiEnabledState(mWifiEnabled);
+ mNetworkLocationInterface.updateCellLockStatus(mCellWakeLockAcquired);
+
+ if (mLastCellState != null) {
+ if (mCollector != null) {
+ mCollector.updateCellState(mLastCellState);
+ }
+ mNetworkLocationProvider.updateCellState(mLastCellState);
+ }
+
+ // There might be an existing wifi scan available
+ if (mWifiManager != null) {
+ List<ScanResult> wifiScanResults = mWifiManager.getScanResults();
+ if (wifiScanResults != null && wifiScanResults.size() != 0) {
+ mNetworkLocationInterface.updateWifiScanResults(wifiScanResults);
+ if (mCollector != null) {
+ mCollector.updateWifiScanResults(wifiScanResults);
+ }
+ }
+ }
+ }
}
}
@@ -1992,12 +2010,12 @@
}
} else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
- int networkState = LocationProvider.TEMPORARILY_UNAVAILABLE;
-
boolean noConnectivity =
intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (!noConnectivity) {
- networkState = LocationProvider.AVAILABLE;
+ mNetworkState = LocationProvider.AVAILABLE;
+ } else {
+ mNetworkState = LocationProvider.TEMPORARILY_UNAVAILABLE;
}
// Notify location providers of current network state
@@ -2005,7 +2023,7 @@
List<LocationProviderImpl> providers = LocationProviderImpl.getProviders();
for (LocationProviderImpl provider : providers) {
if (provider.requiresNetwork()) {
- provider.updateNetworkState(networkState);
+ provider.updateNetworkState(mNetworkState);
}
}
}
@@ -2014,11 +2032,10 @@
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
WifiManager.WIFI_STATE_UNKNOWN);
- boolean enabled;
if (state == WifiManager.WIFI_STATE_ENABLED) {
- enabled = true;
+ mWifiEnabled = true;
} else if (state == WifiManager.WIFI_STATE_DISABLED) {
- enabled = false;
+ mWifiEnabled = false;
} else {
return;
}
@@ -2026,7 +2043,7 @@
// Notify network provider of current wifi enabled state
synchronized (mLocationListeners) {
if (mNetworkLocationInterface != null) {
- mNetworkLocationInterface.updateWifiEnabledState(enabled);
+ mNetworkLocationInterface.updateWifiEnabledState(mWifiEnabled);
}
}