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 | |
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
19 files changed, 140 insertions, 120 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; } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java index 53353f997..a5850005f 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java @@ -17,22 +17,8 @@ package com.android.server.wifi; import static org.hamcrest.CoreMatchers.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.anyInt; -import static org.mockito.Mockito.anyObject; -import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.intThat; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; import android.content.Context; import android.content.pm.UserInfo; @@ -51,6 +37,7 @@ import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.security.Credentials; +import android.security.KeyStore; import android.support.test.InstrumentationRegistry; import android.test.suitebuilder.annotation.SmallTest; import android.text.TextUtils; @@ -154,6 +141,7 @@ public class WifiConfigManagerTest { private ConfigurationMap mConfiguredNetworks; public byte[] mNetworkHistoryBytes; private MockKeyStore mMockKeyStore; + private KeyStore mKeyStore; /** * Called before each test diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java index 9fb859d39..a2379330c 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java @@ -35,6 +35,7 @@ import android.net.wifi.WifiScanner.PnoSettings; import android.net.wifi.WifiScanner.ScanListener; import android.net.wifi.WifiScanner.ScanSettings; import android.net.wifi.WifiSsid; +import android.os.SystemClock; import android.os.WorkSource; import android.test.suitebuilder.annotation.SmallTest; @@ -74,7 +75,7 @@ public class WifiConnectivityManagerTest { mWifiScanner, mWifiConfigManager, mWifiInfo, mWifiQNS, mWifiInjector, mLooper.getLooper()); mWifiConnectivityManager.setWifiEnabled(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis()); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime()); } /** @@ -339,7 +340,7 @@ public class WifiConnectivityManagerTest { long currentTimeStamp = 0; for (int attempt = 0; attempt < maxAttemptRate; attempt++) { currentTimeStamp += connectionAttemptIntervals; - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -347,7 +348,7 @@ public class WifiConnectivityManagerTest { } // Now trigger another connection attempt before the rate interval, this should be // skipped because we've crossed rate limit. - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -378,7 +379,7 @@ public class WifiConnectivityManagerTest { long currentTimeStamp = 0; for (int attempt = 0; attempt < maxAttemptRate; attempt++) { currentTimeStamp += connectionAttemptIntervals; - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -386,7 +387,7 @@ public class WifiConnectivityManagerTest { } // Now trigger another connection attempt after the rate interval, this should not be // skipped because we should've evicted the older attempt. - when(mClock.currentTimeMillis()).thenReturn( + when(mClock.elapsedRealtime()).thenReturn( currentTimeStamp + connectionAttemptIntervals * 2); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( @@ -418,7 +419,7 @@ public class WifiConnectivityManagerTest { long currentTimeStamp = 0; for (int attempt = 0; attempt < maxAttemptRate; attempt++) { currentTimeStamp += connectionAttemptIntervals; - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -429,7 +430,7 @@ public class WifiConnectivityManagerTest { for (int attempt = 0; attempt < maxAttemptRate; attempt++) { currentTimeStamp += connectionAttemptIntervals; - when(mClock.currentTimeMillis()).thenReturn(currentTimeStamp); + when(mClock.elapsedRealtime()).thenReturn(currentTimeStamp); // Set WiFi to disconnected state to trigger PNO scan mWifiConnectivityManager.handleConnectionStateChanged( WifiConnectivityManager.WIFI_STATE_DISCONNECTED); @@ -532,7 +533,7 @@ public class WifiConnectivityManagerTest { */ @Test public void checkPeriodicScanIntervalWhenDisconnected() { - when(mClock.currentTimeMillis()).thenReturn(CURRENT_SYSTEM_TIME_MS); + when(mClock.elapsedRealtime()).thenReturn(CURRENT_SYSTEM_TIME_MS); // Set screen to ON mWifiConnectivityManager.handleScreenStateChanged(true); @@ -581,7 +582,7 @@ public class WifiConnectivityManagerTest { */ @Test public void checkPeriodicScanIntervalWhenConnected() { - when(mClock.currentTimeMillis()).thenReturn(CURRENT_SYSTEM_TIME_MS); + when(mClock.elapsedRealtime()).thenReturn(CURRENT_SYSTEM_TIME_MS); // Set screen to ON mWifiConnectivityManager.handleScreenStateChanged(true); diff --git a/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java b/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java index 1d8ec43cb..64fee84fc 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiQualifiedNetworkSelectorTest.java @@ -40,6 +40,7 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiInfo; import android.net.wifi.WifiSsid; +import android.os.SystemClock; import android.test.suitebuilder.annotation.SmallTest; import android.util.LocalLog; @@ -77,7 +78,7 @@ public class WifiQualifiedNetworkSelectorTest { mWifiQualifiedNetworkSelector.enableVerboseLogging(1); mWifiQualifiedNetworkSelector.setUserPreferredBand(1); mWifiQualifiedNetworkSelector.setWifiNetworkScoreCache(mScoreCache); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis()); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime()); } @After @@ -101,7 +102,7 @@ public class WifiQualifiedNetworkSelectorTest { private List<ScanDetail> getScanDetails(String[] ssids, String[] bssids, int[] frequencies, String[] caps, int[] levels) { List<ScanDetail> scanDetailList = new ArrayList<ScanDetail>(); - long timeStamp = System.currentTimeMillis(); + long timeStamp = mClock.elapsedRealtime(); for (int index = 0; index < ssids.length; index++) { ScanDetail scanDetail = new ScanDetail(WifiSsid.createFromAsciiEncoded(ssids[index]), bssids[index], caps[index], levels[index], frequencies[index], timeStamp, 0); @@ -883,7 +884,7 @@ public class WifiQualifiedNetworkSelectorTest { } //re-enable it - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + WifiQualifiedNetworkSelector.BSSID_BLACKLIST_EXPIRE_TIME); WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, false, scanDetails, false, false, true, false); @@ -921,6 +922,7 @@ public class WifiQualifiedNetworkSelectorTest { scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); + when(mWifiConfigManager.tryEnableQualifiedNetwork(anyInt())).thenReturn(true); savedConfigs[1].getNetworkSelectionStatus().setNetworkSelectionStatus( WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED); WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, @@ -1144,7 +1146,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiInfo.getBSSID()).thenReturn(bssids[1]); when(mWifiInfo.is24GHz()).thenReturn(false); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); levels[0] = -50; // if there is QNS, test1 will be chosen scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); @@ -1187,7 +1189,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiInfo.getNetworkId()).thenReturn(1); when(mWifiInfo.getBSSID()).thenReturn(bssids[1]); when(mWifiInfo.is24GHz()).thenReturn(false); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, @@ -1227,7 +1229,7 @@ public class WifiQualifiedNetworkSelectorTest { mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, false, scanDetails, false, false, true, false); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); @@ -1271,7 +1273,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiInfo.is24GHz()).thenReturn(false); when(mWifiInfo.is5GHz()).thenReturn(true); when(mWifiConfigManager.isOpenNetwork(savedConfigs[1])).thenReturn(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); levels[0] = -60; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); @@ -1322,7 +1324,7 @@ public class WifiQualifiedNetworkSelectorTest { scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); scanResultLinkConfiguration(savedConfigs, scanDetails); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); WifiConfiguration candidate = mWifiQualifiedNetworkSelector.selectQualifiedNetwork(false, @@ -1366,7 +1368,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiInfo.is5GHz()).thenReturn(true); when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); levels[0] = -60; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); scanResultLinkConfiguration(savedConfigs, scanDetails); @@ -1415,7 +1417,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); levels[0] = -60; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); @@ -1462,7 +1464,7 @@ public class WifiQualifiedNetworkSelectorTest { levels[0] = -80 + WifiQualifiedNetworkSelector.SAME_BSSID_AWARD / 4 + WifiQualifiedNetworkSelector.SAME_NETWORK_AWARD / 4 - 1; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(1).getScanResult(); @@ -1508,7 +1510,7 @@ public class WifiQualifiedNetworkSelectorTest { levels[0] = -80 + WifiQualifiedNetworkSelector.SAME_BSSID_AWARD / 4 + WifiQualifiedNetworkSelector.SAME_NETWORK_AWARD / 4 + 1; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); @@ -1559,7 +1561,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); levels[0] = -80 + WifiQualifiedNetworkSelector.SAME_NETWORK_AWARD / 4 - 1; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(1).getScanResult(); @@ -1610,7 +1612,7 @@ public class WifiQualifiedNetworkSelectorTest { when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); levels[0] = -80 + WifiQualifiedNetworkSelector.SAME_BSSID_AWARD / 4 + 1; scanDetails = getScanDetails(ssids, bssids, frequencies, caps, levels); - when(mClock.currentTimeMillis()).thenReturn(System.currentTimeMillis() + 11 * 1000); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime() + 11 * 1000); scanResultLinkConfiguration(savedConfigs, scanDetails); ScanResult chosenScanResult = scanDetails.get(0).getScanResult(); diff --git a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java index bcbf940f3..e0f94ad17 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java @@ -348,6 +348,7 @@ public class WifiStateMachineTest { when(mWifiInjector.getWifiLastResortWatchdog()).thenReturn(mWifiLastResortWatchdog); when(mWifiInjector.getPropertyService()).thenReturn(mPropertyService); when(mWifiInjector.getBuildProperties()).thenReturn(mBuildProperties); + when(mWifiInjector.getKeyStore()).thenReturn(mock(KeyStore.class)); FrameworkFacade factory = getFrameworkFacade(); Context context = getContext(); diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/BaseWifiScannerImplTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/BaseWifiScannerImplTest.java index 15d1465f0..1355961c1 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/BaseWifiScannerImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/BaseWifiScannerImplTest.java @@ -30,6 +30,7 @@ import android.net.wifi.WifiScanner.ScanData; import android.net.wifi.WifiSsid; import android.os.SystemClock; +import com.android.server.wifi.Clock; import com.android.server.wifi.MockAlarmManager; import com.android.server.wifi.MockLooper; import com.android.server.wifi.MockResources; @@ -63,6 +64,7 @@ public abstract class BaseWifiScannerImplTest { MockLooper mLooper; @Mock WifiNative mWifiNative; MockResources mResources; + @Mock Clock mClock; /** * mScanner implementation should be filled in by derived test class @@ -84,6 +86,7 @@ public abstract class BaseWifiScannerImplTest { .thenReturn(mAlarmManager.getAlarmManager()); when(mContext.getResources()).thenReturn(mResources); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime()); } protected Set<Integer> expectedBandScanFreqs(int band) { @@ -386,7 +389,7 @@ public abstract class BaseWifiScannerImplTest { WifiScanner.WIFI_BAND_24_GHZ) .build(); - long approxScanStartUs = SystemClock.elapsedRealtime() * 1000; + long approxScanStartUs = mClock.elapsedRealtime() * 1000; ArrayList<ScanDetail> rawResults = new ArrayList<>(Arrays.asList( new ScanDetail(WifiSsid.createFromAsciiEncoded("TEST AP 1"), "00:00:00:00:00:00", "", -70, 2450, diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/HalWifiScannerTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/HalWifiScannerTest.java index 7da2bad90..d5ff87797 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/HalWifiScannerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/HalWifiScannerTest.java @@ -34,6 +34,6 @@ public class HalWifiScannerTest extends BaseWifiScannerImplTest { new int[]{2400, 2450}, new int[]{5150, 5175}, new int[]{5600, 5650}); - mScanner = new HalWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper()); + mScanner = new HalWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper(), mClock); } } diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantPnoScannerTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantPnoScannerTest.java index 4ef8a3f8d..39709f84d 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantPnoScannerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantPnoScannerTest.java @@ -25,9 +25,11 @@ import static org.mockito.Mockito.*; import android.content.Context; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiScanner; +import android.os.SystemClock; import android.test.suitebuilder.annotation.SmallTest; import com.android.internal.R; +import com.android.server.wifi.Clock; import com.android.server.wifi.MockAlarmManager; import com.android.server.wifi.MockLooper; import com.android.server.wifi.MockResources; @@ -59,6 +61,7 @@ public class SupplicantPnoScannerTest { MockLooper mLooper; @Mock WifiNative mWifiNative; MockResources mResources; + @Mock Clock mClock; SupplicantWifiScannerImpl mScanner; @Before @@ -74,6 +77,7 @@ public class SupplicantPnoScannerTest { when(mContext.getSystemService(Context.ALARM_SERVICE)) .thenReturn(mAlarmManager.getAlarmManager()); when(mContext.getResources()).thenReturn(mResources); + when(mClock.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime()); } /** @@ -229,12 +233,14 @@ public class SupplicantPnoScannerTest { private void createScannerWithHwPnoScanSupport() { mResources.setBoolean(R.bool.config_wifi_background_scan_support, true); - mScanner = new SupplicantWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper()); + mScanner = + new SupplicantWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper(), mClock); } private void createScannerWithSwPnoScanSupport() { mResources.setBoolean(R.bool.config_wifi_background_scan_support, false); - mScanner = new SupplicantWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper()); + mScanner = + new SupplicantWifiScannerImpl(mContext, mWifiNative, mLooper.getLooper(), mClock); } private WifiNative.PnoSettings createDummyPnoSettings(boolean isConnected) { diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantWifiScannerTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantWifiScannerTest.java index b107f8124..7bf548109 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantWifiScannerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/SupplicantWifiScannerTest.java @@ -50,7 +50,7 @@ public class SupplicantWifiScannerTest extends BaseWifiScannerImplTest { @Before public void setup() throws Exception { mScanner = new SupplicantWifiScannerImpl(mContext, mWifiNative, - mLooper.getLooper()); + mLooper.getLooper(), mClock); } @Test diff --git a/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java b/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java index e806f50e2..43dfc5523 100644 --- a/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java +++ b/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java @@ -41,6 +41,7 @@ import android.util.Pair; import com.android.internal.app.IBatteryStats; import com.android.internal.util.Protocol; import com.android.server.wifi.BidirectionalAsyncChannel; +import com.android.server.wifi.Clock; import com.android.server.wifi.MockAlarmManager; import com.android.server.wifi.MockAnswerUtil.AnswerWithArguments; import com.android.server.wifi.MockLooper; @@ -101,7 +102,8 @@ public class WifiScanningServiceTest { new int[]{5600, 5650, 5660}); mLooper = new MockLooper(); - when(mWifiScannerImplFactory.create(any(Context.class), any(Looper.class))) + when(mWifiScannerImplFactory + .create(any(Context.class), any(Looper.class), any(Clock.class))) .thenReturn(mWifiScannerImpl); when(mWifiScannerImpl.getChannelHelper()).thenReturn(channelHelper); when(mWifiInjector.getWifiMetrics()).thenReturn(mWifiMetrics); @@ -332,7 +334,8 @@ public class WifiScanningServiceTest { @Test public void loadDriver() throws Exception { startServiceAndLoadDriver(); - verify(mWifiScannerImplFactory, times(1)).create(any(Context.class), any(Looper.class)); + verify(mWifiScannerImplFactory, times(1)) + .create(any(Context.class), any(Looper.class), any(Clock.class)); Handler handler = mock(Handler.class); BidirectionalAsyncChannel controlChannel = connectChannel(handler); |