summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2016-05-21 14:45:43 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-05-21 14:45:43 +0000
commit8b2a62d9eab3acbeadfa8ff1327eb673357b35ac (patch)
tree9ae26657bf87eba5ac3ef7ab7afa706dd64d74e6 /service
parente02e8ecd7a43cb563598454fde7b3293a42d91d9 (diff)
parent9d6a7a1b5f9e9ea194fc6b15044c9d14d6aefabf (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')
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java22
-rw-r--r--service/java/com/android/server/wifi/WifiConnectivityManager.java30
-rw-r--r--service/java/com/android/server/wifi/WifiInjector.java7
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkHistory.java20
-rw-r--r--service/java/com/android/server/wifi/WifiQualifiedNetworkSelector.java13
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java5
-rw-r--r--service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java6
-rw-r--r--service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java35
-rw-r--r--service/java/com/android/server/wifi/scanner/WifiScannerImpl.java9
-rw-r--r--service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java17
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;
}