diff options
4 files changed, 35 insertions, 91 deletions
diff --git a/location/java/android/location/ILocationProvider.aidl b/location/java/android/location/ILocationProvider.aidl index d43fd6e..82533a5 100644 --- a/location/java/android/location/ILocationProvider.aidl +++ b/location/java/android/location/ILocationProvider.aidl @@ -48,7 +48,6 @@ interface ILocationProvider { boolean sendExtraCommand(String command, inout Bundle extras); void addListener(int uid); void removeListener(int uid); - - /* the following is used only for NetworkLocationProvider */ - void updateCellLockStatus(boolean acquired); + void wakeLockAcquired(); + void wakeLockReleased(); } diff --git a/location/java/android/location/LocationProviderImpl.java b/location/java/android/location/LocationProviderImpl.java index fa0cd2d..a20aa3c 100644 --- a/location/java/android/location/LocationProviderImpl.java +++ b/location/java/android/location/LocationProviderImpl.java @@ -259,10 +259,22 @@ public abstract class LocationProviderImpl extends LocationProvider { } /** - * Informs the location provider when a client is no longerlistening for location information + * Informs the location provider when a client is no longer listening for location information * * @param uid the uid of the client proces */ public void removeListener(int uid) { } + + /** + * Informs the location provider when the location manager service has acquired its wake lock + */ + public void wakeLockAcquired() { + } + + /** + * Informs the location provider when the location manager service has released its wake lock + */ + public void wakeLockReleased() { + } } diff --git a/location/java/com/android/internal/location/LocationProviderProxy.java b/location/java/com/android/internal/location/LocationProviderProxy.java index 84462b2..72dd07d 100644 --- a/location/java/com/android/internal/location/LocationProviderProxy.java +++ b/location/java/com/android/internal/location/LocationProviderProxy.java @@ -222,14 +222,6 @@ public class LocationProviderProxy extends LocationProviderImpl { } } - public void updateCellLockStatus(boolean acquired) { - try { - mProvider.updateCellLockStatus(acquired); - } catch (RemoteException e) { - Log.e(TAG, "updateCellLockStatus failed", e); - } - } - public void addListener(int uid) { try { mProvider.addListener(uid); @@ -245,4 +237,20 @@ public class LocationProviderProxy extends LocationProviderImpl { Log.e(TAG, "removeListener failed", e); } } + + public void wakeLockAcquired() { + try { + mProvider.wakeLockAcquired(); + } catch (RemoteException e) { + Log.e(TAG, "wakeLockAcquired failed", e); + } + } + + public void wakeLockReleased() { + try { + mProvider.wakeLockReleased(); + } catch (RemoteException e) { + Log.e(TAG, "wakeLockReleased failed", e); + } + } } diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java index c60e4ea..1204293 100644 --- a/services/java/com/android/server/LocationManagerService.java +++ b/services/java/com/android/server/LocationManagerService.java @@ -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++) { |