diff options
author | Roshan Pius <rpius@google.com> | 2016-05-21 14:45:43 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-05-21 14:45:43 +0000 |
commit | 8b2a62d9eab3acbeadfa8ff1327eb673357b35ac (patch) | |
tree | 9ae26657bf87eba5ac3ef7ab7afa706dd64d74e6 /service | |
parent | e02e8ecd7a43cb563598454fde7b3293a42d91d9 (diff) | |
parent | 9d6a7a1b5f9e9ea194fc6b15044c9d14d6aefabf (diff) |
Merge changes Ie64c11f3,I91272aa5 into nyc-dev
am: 9d6a7a1b5f
* commit '9d6a7a1b5f9e9ea194fc6b15044c9d14d6aefabf':
WifiNetworHistory: Don't persist QNS blacklist
Change clock for time interval/elapsed measurments
Change-Id: Iaf52de161e43857e22734746fa979bdd893fb80b
Diffstat (limited to 'service')
10 files changed, 90 insertions, 74 deletions
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java index 76a95ccce..e2183e3ab 100644 --- a/service/java/com/android/server/wifi/WifiConfigManager.java +++ b/service/java/com/android/server/wifi/WifiConfigManager.java @@ -814,7 +814,7 @@ public class WifiConfigManager { void noteRoamingFailure(WifiConfiguration config, int reason) { if (config == null) return; - config.lastRoamingFailure = System.currentTimeMillis(); + config.lastRoamingFailure = mClock.currentTimeMillis(); config.roamingFailureBlackListTimeMilli = 2 * (config.roamingFailureBlackListTimeMilli + 1000); if (config.roamingFailureBlackListTimeMilli > mNetworkSwitchingBlackListPeriodMs) { @@ -1391,7 +1391,7 @@ public class WifiConfigManager { * @return true if network status has been changed * false network status is not changed */ - boolean tryEnableQualifiedNetwork(int networkId) { + public boolean tryEnableQualifiedNetwork(int networkId) { WifiConfiguration config = getWifiConfiguration(networkId); if (config == null) { localLog("updateQualifiedNetworkstatus invalid network."); @@ -1407,12 +1407,12 @@ public class WifiConfigManager { * @return true if network status has been changed * false network status is not changed */ - boolean tryEnableQualifiedNetwork(WifiConfiguration config) { + private boolean tryEnableQualifiedNetwork(WifiConfiguration config) { WifiConfiguration.NetworkSelectionStatus networkStatus = config.getNetworkSelectionStatus(); if (networkStatus.isNetworkTemporaryDisabled()) { //time difference in minutes - long timeDifference = (System.currentTimeMillis() - - networkStatus.getDisableTime()) / 1000 / 60; + long timeDifference = + (mClock.elapsedRealtime() - networkStatus.getDisableTime()) / 1000 / 60; if (timeDifference < 0 || timeDifference >= NETWORK_SELECTION_DISABLE_TIMEOUT[ networkStatus.getNetworkSelectionDisableReason()]) { @@ -1497,7 +1497,7 @@ public class WifiConfigManager { if (reason < WifiConfiguration.NetworkSelectionStatus.DISABLED_TLS_VERSION_MISMATCH) { networkStatus.setNetworkSelectionStatus(WifiConfiguration.NetworkSelectionStatus .NETWORK_SELECTION_TEMPORARY_DISABLED); - networkStatus.setDisableTime(System.currentTimeMillis()); + networkStatus.setDisableTime(mClock.elapsedRealtime()); } else { networkStatus.setNetworkSelectionStatus(WifiConfiguration.NetworkSelectionStatus .NETWORK_SELECTION_PERMANENTLY_DISABLED); @@ -1855,7 +1855,7 @@ public class WifiConfigManager { mLastSelectedTimeStamp = -1; } else { mLastSelectedConfiguration = selected.configKey(); - mLastSelectedTimeStamp = System.currentTimeMillis(); + mLastSelectedTimeStamp = mClock.elapsedRealtime(); updateNetworkSelectionStatus(netId, WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLE); if (sVDBG) { @@ -1868,7 +1868,7 @@ public class WifiConfigManager { public void setLatestUserSelectedConfiguration(WifiConfiguration network) { if (network != null) { mLastSelectedConfiguration = network.configKey(); - mLastSelectedTimeStamp = System.currentTimeMillis(); + mLastSelectedTimeStamp = mClock.elapsedRealtime(); } } @@ -2048,7 +2048,7 @@ public class WifiConfigManager { StringBuilder sb = new StringBuilder(); sb.append("time="); Calendar c = Calendar.getInstance(); - c.setTimeInMillis(System.currentTimeMillis()); + c.setTimeInMillis(mClock.currentTimeMillis()); sb.append(String.format("%tm-%td %tH:%tM:%tS.%tL", c, c, c, c, c, c)); if (newNetwork) { @@ -2391,7 +2391,7 @@ public class WifiConfigManager { if (config == null) { return null; } - long now_ms = System.currentTimeMillis(); + long now_ms = mClock.currentTimeMillis(); HashSet<Integer> channels = new HashSet<Integer>(); @@ -3259,7 +3259,7 @@ public class WifiConfigManager { } } // Record last time Connectivity Service switched us away from WiFi and onto Cell - mLastUnwantedNetworkDisconnectTimestamp = System.currentTimeMillis(); + mLastUnwantedNetworkDisconnectTimestamp = mClock.currentTimeMillis(); } int getMaxDhcpRetries() { diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java index 4e4cd2fbc..d99b65f8f 100644 --- a/service/java/com/android/server/wifi/WifiConnectivityManager.java +++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java @@ -510,12 +510,12 @@ public class WifiConnectivityManager { * should be skipped or not. This attempts to rate limit the rate of connections to * prevent us from flapping between networks and draining battery rapidly. */ - private boolean shouldSkipConnectionAttempt(Long currentTimeMillis) { + private boolean shouldSkipConnectionAttempt(Long timeMillis) { Iterator<Long> attemptIter = mConnectionAttemptTimeStamps.iterator(); // First evict old entries from the queue. while (attemptIter.hasNext()) { Long connectionAttemptTimeMillis = attemptIter.next(); - if ((currentTimeMillis - connectionAttemptTimeMillis) + if ((timeMillis - connectionAttemptTimeMillis) > MAX_CONNECTION_ATTEMPTS_TIME_INTERVAL_MS) { attemptIter.remove(); } else { @@ -530,8 +530,8 @@ public class WifiConnectivityManager { /** * Add the current connection attempt timestamp to our queue of connection attempts. */ - private void noteConnectionAttempt(Long currentTimeMillis) { - mConnectionAttemptTimeStamps.addLast(currentTimeMillis); + private void noteConnectionAttempt(Long timeMillis) { + mConnectionAttemptTimeStamps.addLast(timeMillis); } /** @@ -572,13 +572,13 @@ public class WifiConnectivityManager { return; } - Long currentTimeMillis = mClock.currentTimeMillis(); - if (!mScreenOn && shouldSkipConnectionAttempt(currentTimeMillis)) { + Long elapsedTimeMillis = mClock.elapsedRealtime(); + if (!mScreenOn && shouldSkipConnectionAttempt(elapsedTimeMillis)) { localLog("connectToNetwork: Too many connection attempts. Skipping this attempt!"); mTotalConnectivityAttemptsRateLimited++; return; } - noteConnectionAttempt(currentTimeMillis); + noteConnectionAttempt(elapsedTimeMillis); mLastConnectionAttemptBssid = targetBssid; @@ -840,16 +840,16 @@ public class WifiConnectivityManager { private void scheduleWatchdogTimer() { Log.i(TAG, "scheduleWatchdogTimer"); - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - mClock.currentTimeMillis() + WATCHDOG_INTERVAL_MS, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + WATCHDOG_INTERVAL_MS, WATCHDOG_TIMER_TAG, mWatchdogListener, mEventHandler); } // Set up periodic scan timer private void schedulePeriodicScanTimer(int intervalMs) { - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - mClock.currentTimeMillis() + intervalMs, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + intervalMs, PERIODIC_SCAN_TIMER_TAG, mPeriodicScanTimerListener, mEventHandler); } @@ -860,8 +860,8 @@ public class WifiConnectivityManager { RestartSingleScanListener restartSingleScanListener = new RestartSingleScanListener(isWatchdogTriggered, isFullBandScan); - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - mClock.currentTimeMillis() + RESTART_SCAN_DELAY_MS, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + RESTART_SCAN_DELAY_MS, RESTART_SINGLE_SCAN_TIMER_TAG, restartSingleScanListener, mEventHandler); } @@ -870,8 +870,8 @@ public class WifiConnectivityManager { private void scheduleDelayedConnectivityScan(int msFromNow) { localLog("scheduleDelayedConnectivityScan"); - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - mClock.currentTimeMillis() + msFromNow, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + msFromNow, RESTART_CONNECTIVITY_SCAN_TIMER_TAG, mRestartScanListener, mEventHandler); diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index 37ceaa84a..cc4048eb9 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -16,6 +16,8 @@ package com.android.server.wifi; +import android.security.KeyStore; + /** * WiFi dependency injector using thread-safe lazy singleton pattern. To be used for accessing * various wifi class instances and as a handle for mock injection. @@ -36,6 +38,7 @@ public class WifiInjector { private final Clock mClock = new Clock(); private final PropertyService mPropertyService = new SystemPropertyService(); private final BuildProperties mBuildProperties = new SystemBuildProperties(); + private final KeyStore mKeyStore = KeyStore.getInstance(); public WifiMetrics getWifiMetrics() { return mWifiMetrics; @@ -54,4 +57,8 @@ public class WifiInjector { } public BuildProperties getBuildProperties() { return mBuildProperties; } + + public KeyStore getKeyStore() { + return mKeyStore; + } } diff --git a/service/java/com/android/server/wifi/WifiNetworkHistory.java b/service/java/com/android/server/wifi/WifiNetworkHistory.java index 623d1cb96..cd1fe8b21 100644 --- a/service/java/com/android/server/wifi/WifiNetworkHistory.java +++ b/service/java/com/android/server/wifi/WifiNetworkHistory.java @@ -21,6 +21,7 @@ import android.content.Context; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiConfiguration.NetworkSelectionStatus; import android.net.wifi.WifiSsid; import android.os.Environment; import android.os.Process; @@ -69,7 +70,6 @@ public class WifiNetworkHistory { private static final String FREQ_KEY = "FREQ"; private static final String DATE_KEY = "DATE"; private static final String MILLI_KEY = "MILLI"; - private static final String BLACKLIST_MILLI_KEY = "BLACKLIST_MILLI"; private static final String NETWORK_ID_KEY = "ID"; private static final String PRIORITY_KEY = "PRIORITY"; private static final String DEFAULT_GW_KEY = "DEFAULT_GW"; @@ -146,8 +146,7 @@ public class WifiNetworkHistory { else loge("attempt config w/o lp"); */ - WifiConfiguration.NetworkSelectionStatus status = - config.getNetworkSelectionStatus(); + NetworkSelectionStatus status = config.getNetworkSelectionStatus(); if (VDBG) { int numlink = 0; if (config.linkedConfigurations != null) { @@ -376,8 +375,7 @@ public class WifiNetworkHistory { } } } else if (config != null) { - WifiConfiguration.NetworkSelectionStatus networkStatus = - config.getNetworkSelectionStatus(); + NetworkSelectionStatus networkStatus = config.getNetworkSelectionStatus(); switch (key) { case SSID_KEY: if (config.isPasspoint()) { @@ -432,9 +430,6 @@ public class WifiNetworkHistory { case CREATOR_UID_KEY: config.creatorUid = Integer.parseInt(value); break; - case BLACKLIST_MILLI_KEY: - networkStatus.setDisableTime(Long.parseLong(value)); - break; case SCORER_OVERRIDE_KEY: config.numScorerOverride = Integer.parseInt(value); break; @@ -457,7 +452,14 @@ public class WifiNetworkHistory { config.peerWifiConfiguration = value; break; case NETWORK_SELECTION_STATUS_KEY: - networkStatus.setNetworkSelectionStatus(Integer.parseInt(value)); + int networkStatusValue = Integer.parseInt(value); + // Reset temporarily disabled network status + if (networkStatusValue == + NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED) { + networkStatusValue = + NetworkSelectionStatus.NETWORK_SELECTION_ENABLED; + } + networkStatus.setNetworkSelectionStatus(networkStatusValue); break; case NETWORK_SELECTION_DISABLE_REASON_KEY: networkStatus.setNetworkSelectionDisableReason(Integer.parseInt(value)); diff --git a/service/java/com/android/server/wifi/WifiQualifiedNetworkSelector.java b/service/java/com/android/server/wifi/WifiQualifiedNetworkSelector.java index a1c665a3a..edb539b90 100644 --- a/service/java/com/android/server/wifi/WifiQualifiedNetworkSelector.java +++ b/service/java/com/android/server/wifi/WifiQualifiedNetworkSelector.java @@ -297,7 +297,7 @@ public class WifiQualifiedNetworkSelector { //Do not select again if last selection is within //MINIMUM_QUALIFIED_NETWORK_SELECTION_INTERVAL if (mLastQualifiedNetworkSelectionTimeStamp != INVALID_TIME_STAMP) { - long gap = mClock.currentTimeMillis() - mLastQualifiedNetworkSelectionTimeStamp; + long gap = mClock.elapsedRealtime() - mLastQualifiedNetworkSelectionTimeStamp; if (gap < MINIMUM_QUALIFIED_NETWORK_SELECTION_INTERVAL) { localLog("Too short to last successful Qualified Network Selection Gap is:" + gap + " ms!"); @@ -355,7 +355,7 @@ public class WifiQualifiedNetworkSelector { //last user selection award if (sameSelect) { - long timeDifference = mClock.currentTimeMillis() + long timeDifference = mClock.elapsedRealtime() - mWifiConfigManager.getLastSelectedTimeStamp(); if (timeDifference > 0) { @@ -480,6 +480,7 @@ public class WifiQualifiedNetworkSelector { boolean change = false; String key = selected.configKey(); + // This is only used for setting the connect choice timestamp for debugging purposes. long currentTime = mClock.currentTimeMillis(); List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks(); @@ -543,7 +544,7 @@ public class WifiQualifiedNetworkSelector { status.mCounter++; if (status.mCounter >= BSSID_BLACKLIST_THRESHOLD) { status.mIsBlacklisted = true; - status.mBlacklistedTimeStamp = mClock.currentTimeMillis(); + status.mBlacklistedTimeStamp = mClock.elapsedRealtime(); return true; } } @@ -563,7 +564,7 @@ public class WifiQualifiedNetworkSelector { while (iter.hasNext()) { BssidBlacklistStatus status = iter.next(); if (status != null && status.mIsBlacklisted) { - if (mClock.currentTimeMillis() - status.mBlacklistedTimeStamp + if (mClock.elapsedRealtime() - status.mBlacklistedTimeStamp >= BSSID_BLACKLIST_EXPIRE_TIME) { iter.remove(); } @@ -639,7 +640,7 @@ public class WifiQualifiedNetworkSelector { mWifiConfigManager.getWifiConfiguration(lastUserSelectedNetWorkKey); if (lastUserSelectedNetwork != null) { localLog("Last selection is " + lastUserSelectedNetwork.SSID + " Time to now: " - + ((mClock.currentTimeMillis() - mWifiConfigManager.getLastSelectedTimeStamp()) + + ((mClock.elapsedRealtime() - mWifiConfigManager.getLastSelectedTimeStamp()) / 1000 / 60 + " minutes")); } @@ -877,7 +878,7 @@ public class WifiQualifiedNetworkSelector { mCurrentBssid = scanResultCandidate.BSSID; mCurrentConnectedNetwork = networkCandidate; - mLastQualifiedNetworkSelectionTimeStamp = mClock.currentTimeMillis(); + mLastQualifiedNetworkSelectionTimeStamp = mClock.elapsedRealtime(); return networkCandidate; } diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index 936fa146c..c92d0c803 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -90,7 +90,6 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.WorkSource; import android.provider.Settings; -import android.security.KeyStore; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; @@ -1021,7 +1020,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss PackageManager.FEATURE_WIFI_DIRECT); mWifiConfigManager = mFacade.makeWifiConfigManager(context, mWifiNative, facade, - mClock, userManager, KeyStore.getInstance()); + mWifiInjector.getClock(), userManager, mWifiInjector.getKeyStore()); mWifiMonitor = WifiMonitor.getInstance(); @@ -1036,7 +1035,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss mWifiInfo = new WifiInfo(); mWifiQualifiedNetworkSelector = new WifiQualifiedNetworkSelector(mWifiConfigManager, - mContext, mWifiInfo, mClock); + mContext, mWifiInfo, mWifiInjector.getClock()); mSupplicantStateTracker = mFacade.makeSupplicantStateTracker( context, mWifiConfigManager, getHandler()); diff --git a/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java index 6351042a8..d85c818d2 100644 --- a/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java @@ -17,13 +17,13 @@ package com.android.server.wifi.scanner; import android.content.Context; -import android.net.wifi.WifiManager; import android.net.wifi.WifiScanner; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; +import com.android.server.wifi.Clock; import com.android.server.wifi.WifiNative; /** @@ -40,11 +40,11 @@ public class HalWifiScannerImpl extends WifiScannerImpl implements Handler.Callb private final SupplicantWifiScannerImpl mSupplicantScannerDelegate; private final boolean mHalBasedPnoSupported; - public HalWifiScannerImpl(Context context, WifiNative wifiNative, Looper looper) { + public HalWifiScannerImpl(Context context, WifiNative wifiNative, Looper looper, Clock clock) { mWifiNative = wifiNative; mChannelHelper = new HalChannelHelper(wifiNative); mSupplicantScannerDelegate = - new SupplicantWifiScannerImpl(context, wifiNative, mChannelHelper, looper); + new SupplicantWifiScannerImpl(context, wifiNative, mChannelHelper, looper, clock); // We are not going to support HAL ePNO currently. mHalBasedPnoSupported = false; diff --git a/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java index aada52ddd..61c87f374 100644 --- a/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java @@ -24,10 +24,10 @@ import android.net.wifi.WifiScanner; import android.os.Handler; import android.os.Looper; import android.os.Message; -import android.os.SystemClock; import android.util.Log; import com.android.internal.R; +import com.android.server.wifi.Clock; import com.android.server.wifi.ScanDetail; import com.android.server.wifi.WifiMonitor; import com.android.server.wifi.WifiNative; @@ -66,6 +66,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle private final AlarmManager mAlarmManager; private final Handler mEventHandler; private final ChannelHelper mChannelHelper; + private final Clock mClock; private Object mSettingsLock = new Object(); @@ -131,13 +132,14 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle }; public SupplicantWifiScannerImpl(Context context, WifiNative wifiNative, - ChannelHelper channelHelper, Looper looper) { + ChannelHelper channelHelper, Looper looper, Clock clock) { mContext = context; mWifiNative = wifiNative; mChannelHelper = channelHelper; mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); mEventHandler = new Handler(looper, this); - mHwPnoDebouncer = new HwPnoDebouncer(mWifiNative, mAlarmManager, mEventHandler); + mClock = clock; + mHwPnoDebouncer = new HwPnoDebouncer(mWifiNative, mAlarmManager, mEventHandler, mClock); // Check if the device supports HW PNO scans. mHwPnoScanSupported = mContext.getResources().getBoolean( @@ -149,9 +151,10 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle WifiMonitor.SCAN_RESULTS_EVENT, mEventHandler); } - public SupplicantWifiScannerImpl(Context context, WifiNative wifiNative, Looper looper) { + public SupplicantWifiScannerImpl(Context context, WifiNative wifiNative, Looper looper, + Clock clock) { // TODO figure out how to get channel information from supplicant - this(context, wifiNative, new NoBandChannelHelper(), looper); + this(context, wifiNative, new NoBandChannelHelper(), looper, clock); } @Override @@ -338,7 +341,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle ChannelCollection allFreqs = mChannelHelper.createChannelCollection(); Set<Integer> hiddenNetworkIdSet = new HashSet<Integer>(); final LastScanSettings newScanSettings = - new LastScanSettings(SystemClock.elapsedRealtime()); + new LastScanSettings(mClock.elapsedRealtime()); // Update scan settings if there is a pending scan if (!mBackgroundScanPaused) { @@ -395,8 +398,8 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle mNextBackgroundScanPeriod++; mBackgroundScanPeriodPending = false; - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + mBackgroundScanSettings.base_period_ms, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + mBackgroundScanSettings.base_period_ms, BACKGROUND_PERIOD_ALARM_TAG, mScanPeriodListener, mEventHandler); } } @@ -441,8 +444,8 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle + ", single=" + newScanSettings.singleScanActive); } mLastScanSettings = newScanSettings; - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + SCAN_TIMEOUT_MS, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + SCAN_TIMEOUT_MS, TIMEOUT_ALARM_TAG, mScanTimeoutListener, mEventHandler); } else { Log.e(TAG, "Failed to start scan, freqs=" + freqs); @@ -1006,6 +1009,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle private final WifiNative mWifiNative; private final AlarmManager mAlarmManager; private final Handler mEventHandler; + private final Clock mClock; private long mLastPnoChangeTimeStamp = -1L; private boolean mExpectedPnoState = false; private boolean mCurrentPnoState = false;; @@ -1023,10 +1027,11 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle } public HwPnoDebouncer(WifiNative wifiNative, AlarmManager alarmManager, - Handler eventHandler) { + Handler eventHandler, Clock clock) { mWifiNative = wifiNative; mAlarmManager = alarmManager; mEventHandler = eventHandler; + mClock = clock; } /** @@ -1039,7 +1044,7 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle return true; } - mLastPnoChangeTimeStamp = System.currentTimeMillis(); + mLastPnoChangeTimeStamp = mClock.elapsedRealtime(); if (mWifiNative.setPnoScan(enable)) { Log.d(TAG, "Changed PNO state from " + mCurrentPnoState + " to " + enable); mCurrentPnoState = enable; @@ -1071,14 +1076,14 @@ public class SupplicantWifiScannerImpl extends WifiScannerImpl implements Handle boolean isSuccess = true; mExpectedPnoState = enable; if (!mWaitForTimer) { - long timeDifference = System.currentTimeMillis() - mLastPnoChangeTimeStamp; + long timeDifference = mClock.elapsedRealtime() - mLastPnoChangeTimeStamp; if (timeDifference >= MINIMUM_PNO_GAP_MS) { isSuccess = updatePnoState(enable); } else { long alarmTimeout = MINIMUM_PNO_GAP_MS - timeDifference; Log.d(TAG, "Start PNO timer with delay " + alarmTimeout); - mAlarmManager.set(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + alarmTimeout, PNO_DEBOUNCER_ALARM_TAG, + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + alarmTimeout, PNO_DEBOUNCER_ALARM_TAG, mAlarmListener, mEventHandler); mWaitForTimer = true; } diff --git a/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java b/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java index 66c3eda6f..9012fc6c0 100644 --- a/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/WifiScannerImpl.java @@ -21,6 +21,7 @@ import android.net.wifi.ScanResult; import android.net.wifi.WifiScanner; import android.os.Looper; +import com.android.server.wifi.Clock; import com.android.server.wifi.WifiNative; import java.util.Comparator; @@ -34,7 +35,7 @@ public abstract class WifiScannerImpl { * A factory that create a {@link com.android.server.wifi.scanner.WifiScannerImpl} */ public static interface WifiScannerImplFactory { - WifiScannerImpl create(Context context, Looper looper); + WifiScannerImpl create(Context context, Looper looper, Clock clock); } /** @@ -42,12 +43,12 @@ public abstract class WifiScannerImpl { * This factory should only ever be used once. */ public static final WifiScannerImplFactory DEFAULT_FACTORY = new WifiScannerImplFactory() { - public WifiScannerImpl create(Context context, Looper looper) { + public WifiScannerImpl create(Context context, Looper looper, Clock clock) { WifiNative wifiNative = WifiNative.getWlanNativeInterface(); if (wifiNative.getScanCapabilities(new WifiNative.ScanCapabilities())) { - return new HalWifiScannerImpl(context, wifiNative, looper); + return new HalWifiScannerImpl(context, wifiNative, looper, clock); } else { - return new SupplicantWifiScannerImpl(context, wifiNative, looper); + return new SupplicantWifiScannerImpl(context, wifiNative, looper, clock); } } }; diff --git a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java index 76bff29c7..b732a6e77 100644 --- a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java +++ b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java @@ -51,6 +51,7 @@ import com.android.internal.util.AsyncChannel; import com.android.internal.util.Protocol; import com.android.internal.util.State; import com.android.internal.util.StateMachine; +import com.android.server.wifi.Clock; import com.android.server.wifi.WifiInjector; import com.android.server.wifi.WifiMetrics; import com.android.server.wifi.WifiMetricsProto; @@ -65,7 +66,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.Map; import java.util.Set; public class WifiScanningServiceImpl extends IWifiScanner.Stub { @@ -78,8 +78,6 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { private final LocalLog mLocalLog = new LocalLog(1024); - private final WifiMetrics mWifiMetrics; - private void localLog(String message) { mLocalLog.log(message); } @@ -256,6 +254,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { private ClientHandler mClientHandler; private final IBatteryStats mBatteryStats; private final AlarmManager mAlarmManager; + private final WifiMetrics mWifiMetrics; + private final Clock mClock; WifiScanningServiceImpl(Context context, Looper looper, WifiScannerImpl.WifiScannerImplFactory scannerImplFactory, IBatteryStats batteryStats, @@ -267,6 +267,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { mClients = new ArrayMap<>(); mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); mWifiMetrics = wifiInjector.getWifiMetrics(); + mClock = wifiInjector.getClock(); mPreviousSchedule = null; } @@ -868,7 +869,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { // of this state machine. It is ok right now because the driver loaded event // is sent to this state machine first. if (mScannerImpl == null) { - mScannerImpl = mScannerImplFactory.create(mContext, mLooper); + mScannerImpl = mScannerImplFactory.create(mContext, mLooper, mClock); mChannelHelper = mScannerImpl.getChannelHelper(); } @@ -2166,8 +2167,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { mWifiChangeDetected = false; long unchangedDelay = settings.unchangedSampleSize * settings.periodInMs; mAlarmManager.cancel(mTimeoutIntent); - mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + unchangedDelay, + mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + unchangedDelay, mTimeoutIntent); break; case WifiScanner.CMD_SCAN_RESULT: @@ -2177,8 +2178,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub { reconfigureScan((ScanData[])msg.obj, STATIONARY_SCAN_PERIOD_MS); mWifiChangeDetected = false; - mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + MOVING_STATE_TIMEOUT_MS, + mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, + mClock.elapsedRealtime() + MOVING_STATE_TIMEOUT_MS, mTimeoutIntent); mScanResultsPending = false; } |