location: Location Manager wakelock cleanup, phase 1

Move cell and wifi lock from LocationManagerService to NetworkLocationProvider

Signed-off-by: Mike Lockwood <lockwood@android.com>
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 @@
     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 @@
     }
 
     /**
-     * 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 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 @@
             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.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.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 @@
     // 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 @@
     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 @@
         // 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 @@
         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 @@
             
             // notify NetworkLocationProvider of any events it might have missed
             mNetworkLocationProvider.updateNetworkState(mNetworkState);
-            mNetworkLocationProvider.updateCellLockStatus(mCellWakeLockAcquired);
         }
     }
 
@@ -611,14 +589,6 @@
         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 @@
         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 @@
     }
 
     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 @@
                     + " 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++) {