summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--location/java/android/location/ILocationProvider.aidl5
-rw-r--r--location/java/android/location/LocationProviderImpl.java14
-rw-r--r--location/java/com/android/internal/location/LocationProviderProxy.java24
-rw-r--r--services/java/com/android/server/LocationManagerService.java83
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++) {