From f9e2a491176b086cd3c238b209e025cd68d76001 Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Mon, 28 Feb 2011 12:08:11 -0800 Subject: Fix issue to clear scan alarms If PNO is set after the device is disconnected, the scan alarm should be cleared to prevent both PNO and alarm being active at the same time Bug: 3495698 Change-Id: Id48c87fef68a34a05799e6b82de4088e0573009f --- wifi/java/android/net/wifi/WifiStateMachine.java | 39 +++++++++++++++++------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index 65f2a19b2b30..931fd4010c18 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -2730,11 +2730,30 @@ public class WifiStateMachine extends HierarchicalStateMachine { class DisconnectedState extends HierarchicalState { private boolean mAlarmEnabled = false; + private long mScanIntervalMs; + + private void setScanAlarm(boolean enabled) { + if (enabled == mAlarmEnabled) return; + if (enabled) { + mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, + System.currentTimeMillis() + mScanIntervalMs, + mScanIntervalMs, + mScanIntent); + + mAlarmEnabled = true; + } else { + mAlarmManager.cancel(mScanIntent); + mAlarmEnabled = false; + } + } + @Override public void enter() { if (DBG) Log.d(TAG, getName() + "\n"); EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName()); + mScanIntervalMs = Settings.Secure.getLong(mContext.getContentResolver(), + Settings.Secure.WIFI_SCAN_INTERVAL_MS, DEFAULT_SCAN_INTERVAL_MS); /* * We initiate background scanning if it is enabled, otherwise we * initiate an infrequent scan that wakes up the device to ensure @@ -2751,12 +2770,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { WifiNative.enableBackgroundScan(true); } } else { - long scanMs = Settings.Secure.getLong(mContext.getContentResolver(), - Settings.Secure.WIFI_SCAN_INTERVAL_MS, DEFAULT_SCAN_INTERVAL_MS); - - mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + scanMs, scanMs, mScanIntent); - mAlarmEnabled = true; + setScanAlarm(true); } } @Override @@ -2774,7 +2788,13 @@ public class WifiStateMachine extends HierarchicalStateMachine { break; case CMD_ENABLE_BACKGROUND_SCAN: mEnableBackgroundScan = (message.arg1 == 1); - WifiNative.enableBackgroundScan(mEnableBackgroundScan); + if (mEnableBackgroundScan) { + WifiNative.enableBackgroundScan(true); + setScanAlarm(false); + } else { + WifiNative.enableBackgroundScan(false); + setScanAlarm(true); + } break; /* Ignore network disconnect */ case NETWORK_DISCONNECTION_EVENT: @@ -2811,10 +2831,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { if (mEnableBackgroundScan) { WifiNative.enableBackgroundScan(false); } - if (mAlarmEnabled) { - mAlarmManager.cancel(mScanIntent); - mAlarmEnabled = false; - } + setScanAlarm(false); } } -- cgit v1.2.3-59-g8ed1b