location: Location Manager wakelock cleanup, phase 1

Move cell and wifi lock from LocationManagerService to NetworkLocationProvider

Signed-off-by: Mike Lockwood <lockwood@android.com>
This commit is contained in:
Mike Lockwood
2009-04-21 09:38:18 -07:00
parent 98cb667974
commit e2b44c5aaf
4 changed files with 35 additions and 91 deletions

View File

@@ -56,7 +56,6 @@ import android.location.LocationProvider;
import android.location.LocationProviderImpl;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
@@ -67,7 +66,6 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.util.Config;
import android.util.Log;
import android.util.PrintWriterPrinter;
@@ -138,17 +136,13 @@ public class LocationManagerService extends ILocationManager.Stub {
// Alarm manager and wakelock variables
private final static String ALARM_INTENT = "com.android.location.ALARM_INTENT";
private final static String WAKELOCK_KEY = "LocationManagerService";
private final static String WIFILOCK_KEY = "LocationManagerService";
private AlarmManager mAlarmManager;
private long mAlarmInterval = 0;
private boolean mScreenOn = true;
private PowerManager.WakeLock mWakeLock = null;
private WifiManager.WifiLock mWifiLock = null;
private long mWakeLockAcquireTime = 0;
private boolean mWakeLockGpsReceived = true;
private boolean mWakeLockNetworkReceived = true;
private boolean mWifiWakeLockAcquired = false;
private boolean mCellWakeLockAcquired = false;
/**
* List of all receivers.
@@ -177,15 +171,9 @@ public class LocationManagerService extends ILocationManager.Stub {
private HashMap<String,Location> mLastKnownLocation =
new HashMap<String,Location>();
// Last known cell service state
private TelephonyManager mTelephonyManager;
// Location collector
private ILocationCollector mCollector;
// Wifi Manager
private WifiManager mWifiManager;
private int mNetworkState = LocationProvider.TEMPORARILY_UNAVAILABLE;
// for Settings change notification
@@ -538,9 +526,6 @@ public class LocationManagerService extends ILocationManager.Stub {
// Load providers
loadProviders();
// Listen for Radio changes
mTelephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
// Register for Network (Wifi or Mobile) updates
NetworkStateBroadcastReceiver networkReceiver = new NetworkStateBroadcastReceiver();
IntentFilter networkIntentFilter = new IntentFilter();
@@ -567,12 +552,6 @@ public class LocationManagerService extends ILocationManager.Stub {
mSettings = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, mLocationHandler);
SettingsObserver settingsObserver = new SettingsObserver();
mSettings.addObserver(settingsObserver);
// Get the wifi manager
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
// Create a wifi lock for future use
mWifiLock = getWifiWakelockLocked();
}
public void setNetworkLocationProvider(ILocationProvider provider) {
@@ -589,7 +568,6 @@ public class LocationManagerService extends ILocationManager.Stub {
// notify NetworkLocationProvider of any events it might have missed
mNetworkLocationProvider.updateNetworkState(mNetworkState);
mNetworkLocationProvider.updateCellLockStatus(mCellWakeLockAcquired);
}
}
@@ -611,14 +589,6 @@ public class LocationManagerService extends ILocationManager.Stub {
mGeocodeProvider = provider;
}
private WifiManager.WifiLock getWifiWakelockLocked() {
if (mWifiLock == null && mWifiManager != null) {
mWifiLock = mWifiManager.createWifiLock(WifiManager.WIFI_MODE_SCAN_ONLY, WIFILOCK_KEY);
mWifiLock.setReferenceCounted(false);
}
return mWifiLock;
}
private boolean isAllowedBySettingsLocked(String provider) {
if (mEnabledProviders.contains(provider)) {
return true;
@@ -1861,34 +1831,8 @@ public class LocationManagerService extends ILocationManager.Stub {
mWakeLockAcquireTime = SystemClock.elapsedRealtime();
log("Acquired wakelock");
// Acquire cell lock
if (mCellWakeLockAcquired) {
// Lock is already acquired
} else if (!mWakeLockNetworkReceived) {
mTelephonyManager.enableLocationUpdates();
mCellWakeLockAcquired = true;
} else {
mCellWakeLockAcquired = false;
}
// Notify NetworkLocationProvider
if (mNetworkLocationProvider != null) {
mNetworkLocationProvider.updateCellLockStatus(mCellWakeLockAcquired);
}
// Acquire wifi lock
WifiManager.WifiLock wifiLock = getWifiWakelockLocked();
if (wifiLock != null) {
if (mWifiWakeLockAcquired) {
// Lock is already acquired
} else if (mWifiManager.isWifiEnabled() && !mWakeLockNetworkReceived) {
wifiLock.acquire();
mWifiWakeLockAcquired = true;
} else {
mWifiWakeLockAcquired = false;
Log.w(TAG, "acquireWakeLock(): Unable to get WiFi lock");
}
}
mNetworkLocationProvider.wakeLockAcquired();
mGpsLocationProvider.wakeLockAcquired();
}
private void releaseWakeLockLocked() {
@@ -1902,25 +1846,8 @@ public class LocationManagerService extends ILocationManager.Stub {
}
private void releaseWakeLockXLocked() {
// Release wifi lock
WifiManager.WifiLock wifiLock = getWifiWakelockLocked();
if (wifiLock != null) {
if (mWifiWakeLockAcquired) {
wifiLock.release();
mWifiWakeLockAcquired = false;
}
}
// Release cell lock
if (mCellWakeLockAcquired) {
mTelephonyManager.disableLocationUpdates();
mCellWakeLockAcquired = false;
}
// Notify NetworkLocationProvider
if (mNetworkLocationProvider != null) {
mNetworkLocationProvider.updateCellLockStatus(mCellWakeLockAcquired);
}
mNetworkLocationProvider.wakeLockReleased();
mGpsLocationProvider.wakeLockReleased();
// Release wake lock
mWakeLockAcquireTime = 0;
@@ -2115,8 +2042,6 @@ public class LocationManagerService extends ILocationManager.Stub {
+ " mWakeLockAcquireTime=" + mWakeLockAcquireTime);
pw.println(" mWakeLockGpsReceived=" + mWakeLockGpsReceived
+ " mWakeLockNetworkReceived=" + mWakeLockNetworkReceived);
pw.println(" mWifiWakeLockAcquired=" + mWifiWakeLockAcquired
+ " mCellWakeLockAcquired=" + mCellWakeLockAcquired);
pw.println(" Listeners:");
int N = mReceivers.size();
for (int i=0; i<N; i++) {