From 3fb4ba616edb114b3197936eb67f481eb86b7cae Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Thu, 9 Aug 2012 15:07:45 -0700 Subject: Add control to disable suspend optimizations Add an advanced setting that allows user to turn off power savings at screen off. Bug: 5885175 Change-Id: I2dd013b86d7500a2ad1f9ec75d86551808f05543 --- wifi/java/android/net/wifi/WifiStateMachine.java | 33 +++++++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'wifi/java/android') diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index c4807598c468..a8975ff76acc 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -41,6 +41,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; +import android.database.ContentObserver; import android.net.ConnectivityManager; import android.net.DhcpInfo; import android.net.DhcpInfoInternal; @@ -138,6 +139,8 @@ public class WifiStateMachine extends StateMachine { private boolean mSetScanActive = false; /* High perf mode is true if an app has held a high perf Wifi Lock */ private boolean mHighPerfMode = false; + /* Tracks if user has disabled suspend optimizations through settings */ + private AtomicBoolean mSuspendOptEnabled = new AtomicBoolean(true); private boolean mBluetoothConnectionActive = false; @@ -591,6 +594,9 @@ public class WifiStateMachine extends StateMachine { mPrimaryDeviceType = mContext.getResources().getString( com.android.internal.R.string.config_wifi_p2p_device_type); + mSuspendOptEnabled.set(Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED, 1) == 1); + mContext.registerReceiver( new BroadcastReceiver() { @Override @@ -626,18 +632,25 @@ public class WifiStateMachine extends StateMachine { enableBackgroundScanCommand(false); } enableAllNetworks(); - sendMessage(CMD_CLEAR_SUSPEND_OPTIMIZATIONS); + if (mSuspendOptEnabled.get()) { + if (DBG) log("Clear suspend optimizations"); + sendMessage(CMD_CLEAR_SUSPEND_OPTIMIZATIONS); + } } else if (action.equals(Intent.ACTION_SCREEN_OFF)) { enableRssiPolling(false); if (mBackgroundScanSupported) { enableBackgroundScanCommand(true); } - //Allow 2s for suspend optimizations to be set - mSuspendWakeLock.acquire(2000); - sendMessage(CMD_SET_SUSPEND_OPTIMIZATIONS); + if (mSuspendOptEnabled.get()) { + if (DBG) log("Enable suspend optimizations"); + //Allow 2s for suspend optimizations to be set + mSuspendWakeLock.acquire(2000); + sendMessage(CMD_SET_SUSPEND_OPTIMIZATIONS); + } } } }; + mContext.registerReceiver( new BroadcastReceiver() { @Override @@ -648,6 +661,16 @@ public class WifiStateMachine extends StateMachine { }, new IntentFilter(ACTION_DELAYED_DRIVER_STOP)); + mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED), false, + new ContentObserver(getHandler()) { + @Override + public void onChange(boolean selfChange) { + mSuspendOptEnabled.set(Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED, 1) == 1); + } + }); + mScanResultCache = new LruCache(SCAN_RESULT_CACHE_SIZE); PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); @@ -1133,6 +1156,8 @@ public class WifiStateMachine extends StateMachine { sb.append("mLastNetworkId ").append(mLastNetworkId).append(LS); sb.append("mReconnectCount ").append(mReconnectCount).append(LS); sb.append("mIsScanMode ").append(mIsScanMode).append(LS); + sb.append("mHighPerfMode").append(mHighPerfMode).append(LS); + sb.append("mSuspendOptEnabled").append(mSuspendOptEnabled).append(LS); sb.append("Supplicant status").append(LS) .append(mWifiNative.status()).append(LS).append(LS); -- cgit v1.2.3-59-g8ed1b