summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChung-yih Wang <cywang@google.com>2010-10-09 08:37:40 +0800
committerChung-yih Wang <cywang@google.com>2010-10-09 08:37:40 +0800
commitc7fda188aee215f1842111f5b9f711f7b844b4d4 (patch)
tree965093603472885964dbe98d8b23701721762742
parenta2a1ca42bc07af77a8a10b714517d006cb66c36a (diff)
downloadframeworks_base-c7fda188aee215f1842111f5b9f711f7b844b4d4.zip
frameworks_base-c7fda188aee215f1842111f5b9f711f7b844b4d4.tar.gz
frameworks_base-c7fda188aee215f1842111f5b9f711f7b844b4d4.tar.bz2
Do not release the wifi lock if the screen is off.
We need to be able to receive calls if the device is able to reassociate with any AP later on. Change-Id: Ib7aafb98386bf250ed9b5ec0a5b519594efa1649
-rw-r--r--voip/java/com/android/server/sip/SipService.java22
1 files changed, 21 insertions, 1 deletions
diff --git a/voip/java/com/android/server/sip/SipService.java b/voip/java/com/android/server/sip/SipService.java
index db1931b..ee554b5 100644
--- a/voip/java/com/android/server/sip/SipService.java
+++ b/voip/java/com/android/server/sip/SipService.java
@@ -92,6 +92,7 @@ public final class SipService extends ISipService.Stub {
new HashMap<String, ISipSession>();
private ConnectivityReceiver mConnectivityReceiver;
+ private boolean mScreenOn;
/**
* Starts the SIP service. Do nothing if the SIP API is not supported on the
@@ -111,11 +112,27 @@ public final class SipService extends ISipService.Stub {
mConnectivityReceiver = new ConnectivityReceiver();
context.registerReceiver(mConnectivityReceiver,
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
+ context.registerReceiver(mScreenOnOffReceiver,
+ new IntentFilter(Intent.ACTION_SCREEN_ON));
+ context.registerReceiver(mScreenOnOffReceiver,
+ new IntentFilter(Intent.ACTION_SCREEN_OFF));
mTimer = new WakeupTimer(context);
mWifiOnly = SipManager.isSipWifiOnly(context);
}
+ BroadcastReceiver mScreenOnOffReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (Intent.ACTION_SCREEN_OFF.equals(action)) {
+ mScreenOn = true;
+ } else if (Intent.ACTION_SCREEN_ON.equals(action)) {
+ mScreenOn = false;
+ }
+ }
+ };
+
private MyExecutor getExecutor() {
// create mExecutor lazily
if (mExecutor == null) mExecutor = new MyExecutor();
@@ -366,7 +383,10 @@ public final class SipService extends ISipService.Stub {
boolean wifiOff = (isWifi && !connected) || (wasWifi && !sameType);
boolean wifiOn = isWifi && connected;
if (wifiOff) {
- releaseWifiLock();
+ if (mScreenOn) releaseWifiLock();
+ // If the screen is off, we still keep the wifi lock in order
+ // to be able to reassociate with any available AP. Otherwise,
+ // the wifi driver could be stopped after 15 mins of idle time.
} else if (wifiOn) {
if (anyOpened()) grabWifiLock();
}