summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/AggressiveConnectedScore.java20
-rw-r--r--service/java/com/android/server/wifi/SavedNetworkEvaluator.java13
-rw-r--r--service/java/com/android/server/wifi/ScoringParams.java256
-rw-r--r--service/java/com/android/server/wifi/VelocityBasedConnectedScore.java24
-rw-r--r--service/java/com/android/server/wifi/WakeupEvaluator.java9
-rw-r--r--service/java/com/android/server/wifi/WifiConnectivityManager.java22
-rw-r--r--service/java/com/android/server/wifi/WifiInjector.java15
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkSelector.java25
-rw-r--r--service/java/com/android/server/wifi/WifiScoreReport.java7
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java2
10 files changed, 310 insertions, 83 deletions
diff --git a/service/java/com/android/server/wifi/AggressiveConnectedScore.java b/service/java/com/android/server/wifi/AggressiveConnectedScore.java
index a0de7731e..c8ad00d77 100644
--- a/service/java/com/android/server/wifi/AggressiveConnectedScore.java
+++ b/service/java/com/android/server/wifi/AggressiveConnectedScore.java
@@ -16,29 +16,21 @@
package com.android.server.wifi;
-import android.content.Context;
import android.net.wifi.WifiInfo;
-import com.android.internal.R;
-
/**
- * Experimental scorer, used when aggressive handover preference is set.
+ * Experimental scorer
*/
public class AggressiveConnectedScore extends ConnectedScore {
- // Device configs. The values are examples.
- private final int mThresholdQualifiedRssi5; // -70
- private final int mThresholdQualifiedRssi24; // -73
+ private final ScoringParams mScoringParams;
private int mFrequencyMHz = 5000;
private int mRssi = 0;
- public AggressiveConnectedScore(Context context, Clock clock) {
+ public AggressiveConnectedScore(ScoringParams scoringParams, Clock clock) {
super(clock);
- mThresholdQualifiedRssi5 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_low_rssi_threshold_5GHz);
- mThresholdQualifiedRssi24 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_low_rssi_threshold_24GHz);
+ mScoringParams = scoringParams;
}
@Override
@@ -59,8 +51,8 @@ public class AggressiveConnectedScore extends ConnectedScore {
@Override
public int generateScore() {
- int badRssi = mFrequencyMHz >= 5000 ? mThresholdQualifiedRssi5 : mThresholdQualifiedRssi24;
- int score = (mRssi - badRssi) + WIFI_TRANSITION_SCORE;
+ int threshRssi = mScoringParams.getSufficientRssi(mFrequencyMHz);
+ int score = (mRssi - threshRssi) + WIFI_TRANSITION_SCORE;
return score;
}
}
diff --git a/service/java/com/android/server/wifi/SavedNetworkEvaluator.java b/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
index 97f6b6f09..4b600ed5e 100644
--- a/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
+++ b/service/java/com/android/server/wifi/SavedNetworkEvaluator.java
@@ -44,11 +44,12 @@ public class SavedNetworkEvaluator implements WifiNetworkSelector.NetworkEvaluat
private final int mBand5GHzAward;
private final int mLastSelectionAward;
private final int mSecurityAward;
- private final int mThresholdSaturatedRssi24;
- private final int mThresholdSaturatedRssi5;
+ private final ScoringParams mScoringParams;
- SavedNetworkEvaluator(final Context context, WifiConfigManager configManager, Clock clock,
+ SavedNetworkEvaluator(final Context context, ScoringParams scoringParams,
+ WifiConfigManager configManager, Clock clock,
LocalLog localLog, WifiConnectivityHelper connectivityHelper) {
+ mScoringParams = scoringParams;
mWifiConfigManager = configManager;
mClock = clock;
mLocalLog = localLog;
@@ -68,10 +69,6 @@ public class SavedNetworkEvaluator implements WifiNetworkSelector.NetworkEvaluat
R.integer.config_wifi_framework_SECURITY_AWARD);
mBand5GHzAward = context.getResources().getInteger(
R.integer.config_wifi_framework_5GHz_preference_boost_factor);
- mThresholdSaturatedRssi24 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_good_rssi_threshold_24GHz);
- mThresholdSaturatedRssi5 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_good_rssi_threshold_5GHz);
}
private void localLog(String log) {
@@ -162,7 +159,7 @@ public class SavedNetworkEvaluator implements WifiNetworkSelector.NetworkEvaluat
sbuf.append("[ ").append(scanResult.SSID).append(" ").append(scanResult.BSSID)
.append(" RSSI:").append(scanResult.level).append(" ] ");
// Calculate the RSSI score.
- int rssiSaturationThreshold = is5GHz ? mThresholdSaturatedRssi5 : mThresholdSaturatedRssi24;
+ int rssiSaturationThreshold = mScoringParams.getGoodRssi(scanResult.frequency);
int rssi = scanResult.level < rssiSaturationThreshold ? scanResult.level
: rssiSaturationThreshold;
score += (rssi + mRssiScoreOffset) * mRssiScoreSlope;
diff --git a/service/java/com/android/server/wifi/ScoringParams.java b/service/java/com/android/server/wifi/ScoringParams.java
new file mode 100644
index 000000000..1fddd7688
--- /dev/null
+++ b/service/java/com/android/server/wifi/ScoringParams.java
@@ -0,0 +1,256 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.wifi;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.os.Handler;
+import android.provider.Settings;
+import android.util.KeyValueListParser;
+import android.util.Log;
+
+import com.android.internal.R;
+
+/**
+ * Holds parameters used for scoring networks.
+ *
+ * Doing this in one place means that there's a better chance of consistency between
+ * connected score and network selection.
+ *
+ */
+public class ScoringParams {
+ private static final String TAG = "WifiScoringParams";
+ private static final int EXIT = 0;
+ private static final int ENTRY = 1;
+ private static final int SUFFICIENT = 2;
+ private static final int GOOD = 3;
+
+ /**
+ * Parameter values are stored in a separate container so that a new collection of values can
+ * be checked for consistency before activating them.
+ */
+ private class Values {
+ public static final String KEY_RSSI2 = "rssi2";
+ public static final String KEY_RSSI5 = "rssi5";
+ public static final String KEY_HORIZON = "horizon"; // number of seconds for rssi forecast
+
+ public final int[] rssi2 = {-83, -80, -73, -60};
+ public final int[] rssi5 = {-80, -77, -70, -57};
+ public int horizon = 15;
+
+ Values() {
+ }
+
+ Values(Values source) {
+ for (int i = 0; i < rssi2.length; i++) {
+ rssi2[i] = source.rssi2[i];
+ }
+ for (int i = 0; i < rssi5.length; i++) {
+ rssi5[i] = source.rssi5[i];
+ }
+ horizon = source.horizon;
+ }
+
+ public void parseString(String kvList) throws IllegalArgumentException {
+ KeyValueListParser parser = new KeyValueListParser(',');
+ parser.setString(kvList);
+ updateIntArray(rssi2, parser, KEY_RSSI2);
+ updateIntArray(rssi5, parser, KEY_RSSI5);
+ horizon = updateInt(parser, KEY_HORIZON, horizon);
+ }
+
+ private int updateInt(KeyValueListParser parser, String key, int defaultValue)
+ throws IllegalArgumentException {
+ String value = parser.getString(key, null);
+ if (value == null) return defaultValue;
+ try {
+ return Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ private void updateIntArray(final int[] dest, KeyValueListParser parser, String key)
+ throws IllegalArgumentException {
+ if (parser.getString(key, null) == null) return;
+ int[] ints = parser.getIntArray(key, null);
+ if (ints == null) throw new IllegalArgumentException();
+ if (ints.length != dest.length) throw new IllegalArgumentException();
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = ints[i];
+ }
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ appendKey(sb, KEY_RSSI2);
+ appendInts(sb, rssi2);
+ appendKey(sb, KEY_RSSI5);
+ appendInts(sb, rssi5);
+ appendKey(sb, KEY_HORIZON);
+ sb.append(horizon);
+ return sb.toString();
+ }
+
+ private void appendKey(StringBuilder sb, String key) {
+ if (sb.length() != 0) sb.append(",");
+ sb.append(key).append("=");
+ }
+
+ private void appendInts(StringBuilder sb, final int[] a) {
+ final int n = a.length;
+ for (int i = 0; i < n; i++) {
+ if (i > 0) sb.append(":");
+ sb.append(a[i]);
+ }
+ }
+ }
+
+ @NonNull private Values mVal = new Values();
+
+ public ScoringParams() {
+ }
+
+ public ScoringParams(Context context) {
+ loadResources(context);
+ }
+
+ public ScoringParams(Context context, FrameworkFacade facade, Handler handler) {
+ loadResources(context);
+ setupContentObserver(context, facade, handler);
+ }
+
+ private void loadResources(Context context) {
+ mVal.rssi2[EXIT] = context.getResources().getInteger(
+ R.integer.config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz);
+ mVal.rssi2[ENTRY] = context.getResources().getInteger(
+ R.integer.config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz);
+ mVal.rssi2[SUFFICIENT] = context.getResources().getInteger(
+ R.integer.config_wifi_framework_wifi_score_low_rssi_threshold_24GHz);
+ mVal.rssi2[GOOD] = context.getResources().getInteger(
+ R.integer.config_wifi_framework_wifi_score_good_rssi_threshold_24GHz);
+ mVal.rssi5[EXIT] = context.getResources().getInteger(
+ R.integer.config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz);
+ mVal.rssi5[ENTRY] = context.getResources().getInteger(
+ R.integer.config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz);
+ mVal.rssi5[SUFFICIENT] = context.getResources().getInteger(
+ R.integer.config_wifi_framework_wifi_score_low_rssi_threshold_5GHz);
+ mVal.rssi5[GOOD] = context.getResources().getInteger(
+ R.integer.config_wifi_framework_wifi_score_good_rssi_threshold_5GHz);
+ }
+
+ private void setupContentObserver(Context context, FrameworkFacade facade, Handler handler) {
+ final ScoringParams self = this;
+ String defaults = self.toString();
+ ContentObserver observer = new ContentObserver(handler) {
+ @Override
+ public void onChange(boolean selfChange) {
+ String params = facade.getStringSetting(
+ context, Settings.Global.WIFI_SCORE_PARAMS);
+ if (params != null) {
+ self.update(defaults);
+ if (!self.update(params)) {
+ Log.e(TAG, "Error in " + Settings.Global.WIFI_SCORE_PARAMS + ": " + params);
+ }
+ }
+ Log.i(TAG, self.toString());
+ }
+ };
+ facade.registerContentObserver(context,
+ Settings.Global.getUriFor(Settings.Global.WIFI_SCORE_PARAMS),
+ true,
+ observer);
+ observer.onChange(false);
+ }
+
+ /**
+ * Updates the parameters from the given parameter string.
+ * If any errors are detected, no change is made.
+ * @param kvList is a comma-separated key=value list.
+ * @return true for success
+ */
+ public boolean update(String kvList) {
+ Values v = new Values(mVal);
+ try {
+ v.parseString(kvList);
+ mVal = v;
+ return true;
+ } catch (IllegalArgumentException e) {
+ return false;
+ }
+ }
+
+ /** Constant to denote someplace in the 2.4 GHz band */
+ public static final int BAND2 = 2400;
+
+ /** Constant to denote someplace in the 5 GHz band */
+ public static final int BAND5 = 5000;
+
+ /**
+ * Returns the RSSI value at which the connection is deemed to be unusable,
+ * in the absence of other indications.
+ */
+ public int getExitRssi(int frequencyMegaHertz) {
+ return getRssiArray(frequencyMegaHertz)[EXIT];
+ }
+
+ /**
+ * Returns the minimum scan RSSI for making a connection attempt.
+ */
+ public int getEntryRssi(int frequencyMegaHertz) {
+ return getRssiArray(frequencyMegaHertz)[ENTRY];
+ }
+
+ /**
+ * Returns a connected RSSI value that indicates the connection is
+ * good enough that we needn't scan for alternatives.
+ */
+ public int getSufficientRssi(int frequencyMegaHertz) {
+ return getRssiArray(frequencyMegaHertz)[SUFFICIENT];
+ }
+
+ /**
+ * Returns a connected RSSI value that indicates a good connection.
+ */
+ public int getGoodRssi(int frequencyMegaHertz) {
+ return getRssiArray(frequencyMegaHertz)[GOOD];
+ }
+
+ /**
+ * Returns the number of seconds to use for rssi forecast.
+ */
+ public int getHorizonSeconds() {
+ return mVal.horizon;
+ }
+
+ private static final int MINIMUM_5GHZ_BAND_FREQUENCY_IN_MEGAHERTZ = 5000;
+
+ private int[] getRssiArray(int frequency) {
+ if (frequency < MINIMUM_5GHZ_BAND_FREQUENCY_IN_MEGAHERTZ) {
+ return mVal.rssi2;
+ } else {
+ return mVal.rssi5;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return mVal.toString();
+ }
+}
diff --git a/service/java/com/android/server/wifi/VelocityBasedConnectedScore.java b/service/java/com/android/server/wifi/VelocityBasedConnectedScore.java
index bfc51f69e..cb47978df 100644
--- a/service/java/com/android/server/wifi/VelocityBasedConnectedScore.java
+++ b/service/java/com/android/server/wifi/VelocityBasedConnectedScore.java
@@ -16,10 +16,8 @@
package com.android.server.wifi;
-import android.content.Context;
import android.net.wifi.WifiInfo;
-import com.android.internal.R;
import com.android.server.wifi.util.KalmanFilter;
import com.android.server.wifi.util.Matrix;
@@ -29,23 +27,16 @@ import com.android.server.wifi.util.Matrix;
*/
public class VelocityBasedConnectedScore extends ConnectedScore {
- // Device configs. The values are examples.
- private final int mThresholdMinimumRssi5; // -82
- private final int mThresholdMinimumRssi24; // -85
+ private final ScoringParams mScoringParams;
- private int mFrequency = 5000;
- private double mThresholdMinimumRssi;
+ private int mFrequency = ScoringParams.BAND5;
private double mThresholdAdjustment;
private final KalmanFilter mFilter;
private long mLastMillis;
- public VelocityBasedConnectedScore(Context context, Clock clock) {
+ public VelocityBasedConnectedScore(ScoringParams scoringParams, Clock clock) {
super(clock);
- mThresholdMinimumRssi5 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz);
- mThresholdMinimumRssi24 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz);
- mThresholdMinimumRssi = mThresholdMinimumRssi5;
+ mScoringParams = scoringParams;
mFilter = new KalmanFilter();
mFilter.mH = new Matrix(2, new double[]{1.0, 0.0});
mFilter.mR = new Matrix(1, new double[]{1.0});
@@ -71,7 +62,6 @@ public class VelocityBasedConnectedScore extends ConnectedScore {
@Override
public void reset() {
mLastMillis = 0;
- mThresholdAdjustment = 0.0;
}
/**
@@ -114,8 +104,6 @@ public class VelocityBasedConnectedScore extends ConnectedScore {
// Consider resetting or partially resetting threshold adjustment
// Consider checking bssid
mFrequency = frequency;
- mThresholdMinimumRssi =
- mFrequency >= 5000 ? mThresholdMinimumRssi5 : mThresholdMinimumRssi24;
}
updateUsingRssi(wifiInfo.getRssi(), millis, mDefaultRssiStandardDeviation);
adjustThreshold(wifiInfo);
@@ -142,7 +130,7 @@ public class VelocityBasedConnectedScore extends ConnectedScore {
* Returns the adjusted RSSI threshold
*/
public double getAdjustedRssiThreshold() {
- return mThresholdMinimumRssi + mThresholdAdjustment;
+ return mScoringParams.getExitRssi(mFrequency) + mThresholdAdjustment;
}
private double mMinimumPpsForMeasuringSuccess = 2.0;
@@ -178,7 +166,7 @@ public class VelocityBasedConnectedScore extends ConnectedScore {
@Override
public int generateScore() {
double badRssi = getAdjustedRssiThreshold();
- double horizonSeconds = 15.0;
+ double horizonSeconds = mScoringParams.getHorizonSeconds();
Matrix x = new Matrix(mFilter.mx);
double filteredRssi = x.get(0, 0);
setDeltaTimeSeconds(horizonSeconds);
diff --git a/service/java/com/android/server/wifi/WakeupEvaluator.java b/service/java/com/android/server/wifi/WakeupEvaluator.java
index df9c43df6..b98a4fd23 100644
--- a/service/java/com/android/server/wifi/WakeupEvaluator.java
+++ b/service/java/com/android/server/wifi/WakeupEvaluator.java
@@ -19,7 +19,6 @@ package com.android.server.wifi;
import android.content.Context;
import android.net.wifi.ScanResult;
-import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import java.util.Collection;
@@ -36,11 +35,9 @@ public class WakeupEvaluator {
* Constructs a {@link WakeupEvaluator} using the given context.
*/
public static WakeupEvaluator fromContext(Context context) {
- int minimumRssi24 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz);
- int minimumRssi5 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz);
- return new WakeupEvaluator(minimumRssi24, minimumRssi5);
+ ScoringParams scoringParams = new ScoringParams(context); // TODO(b/74793980) - replumb
+ return new WakeupEvaluator(scoringParams.getEntryRssi(ScoringParams.BAND2),
+ scoringParams.getEntryRssi(ScoringParams.BAND5));
}
@VisibleForTesting
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java
index 6594945ca..3b9d0ff21 100644
--- a/service/java/com/android/server/wifi/WifiConnectivityManager.java
+++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java
@@ -143,6 +143,7 @@ public class WifiConnectivityManager {
private final AlarmManager mAlarmManager;
private final Handler mEventHandler;
private final Clock mClock;
+ private final ScoringParams mScoringParams;
private final LocalLog mLocalLog;
private final LinkedList<Long> mConnectionAttemptTimeStamps;
@@ -562,7 +563,8 @@ public class WifiConnectivityManager {
/**
* WifiConnectivityManager constructor
*/
- WifiConnectivityManager(Context context, WifiStateMachine stateMachine,
+ WifiConnectivityManager(Context context, ScoringParams scoringParams,
+ WifiStateMachine stateMachine,
WifiScanner scanner, WifiConfigManager configManager, WifiInfo wifiInfo,
WifiNetworkSelector networkSelector, WifiConnectivityHelper connectivityHelper,
WifiLastResortWatchdog wifiLastResortWatchdog, OpenNetworkNotifier openNetworkNotifier,
@@ -587,12 +589,12 @@ public class WifiConnectivityManager {
mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
mEventHandler = new Handler(looper);
mClock = clock;
+ mScoringParams = scoringParams;
mConnectionAttemptTimeStamps = new LinkedList<>();
- mMin5GHzRssi = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz);
- mMin24GHzRssi = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz);
+ //TODO(b/74793980) - handle these more dynamically
+ mMin5GHzRssi = mScoringParams.getEntryRssi(ScoringParams.BAND5);
+ mMin24GHzRssi = mScoringParams.getEntryRssi(ScoringParams.BAND2);
mBand5GHzBonus = context.getResources().getInteger(
R.integer.config_wifi_framework_5GHz_preference_boost_factor);
mCurrentConnectionBonus = context.getResources().getInteger(
@@ -601,14 +603,12 @@ public class WifiConnectivityManager {
R.integer.config_wifi_framework_SAME_BSSID_AWARD);
mSecureBonus = context.getResources().getInteger(
R.integer.config_wifi_framework_SECURITY_AWARD);
- int thresholdSaturatedRssi24 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_good_rssi_threshold_24GHz);
mEnableAutoJoinWhenAssociated = context.getResources().getBoolean(
R.bool.config_wifi_framework_enable_associated_network_selection);
- mInitialScoreMax = (context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_good_rssi_threshold_24GHz)
- + context.getResources().getInteger(
- R.integer.config_wifi_framework_RSSI_SCORE_OFFSET))
+ mInitialScoreMax = (Math.max(mScoringParams.getGoodRssi(ScoringParams.BAND2),
+ mScoringParams.getGoodRssi(ScoringParams.BAND5))
+ + context.getResources().getInteger(
+ R.integer.config_wifi_framework_RSSI_SCORE_OFFSET))
* context.getResources().getInteger(
R.integer.config_wifi_framework_RSSI_SCORE_SLOPE);
mFullScanMaxTxRate = context.getResources().getInteger(
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java
index b6beb6820..2e0591978 100644
--- a/service/java/com/android/server/wifi/WifiInjector.java
+++ b/service/java/com/android/server/wifi/WifiInjector.java
@@ -89,6 +89,7 @@ public class WifiInjector {
private final SupplicantP2pIfaceHal mSupplicantP2pIfaceHal;
private final HostapdHal mHostapdHal;
private final WifiVendorHal mWifiVendorHal;
+ private final ScoringParams mScoringParams;
private final WifiStateMachine mWifiStateMachine;
private final WifiStateMachinePrime mWifiStateMachinePrime;
private final WifiSettingsStore mSettingsStore;
@@ -223,10 +224,13 @@ public class WifiInjector {
mWifiMetrics.setWifiConfigManager(mWifiConfigManager);
mWifiConnectivityHelper = new WifiConnectivityHelper(mWifiNative);
mConnectivityLocalLog = new LocalLog(ActivityManager.isLowRamDeviceStatic() ? 256 : 512);
- mWifiNetworkSelector = new WifiNetworkSelector(mContext, mWifiConfigManager, mClock,
+ mScoringParams = new ScoringParams(mContext, mFrameworkFacade,
+ new Handler(wifiStateMachineLooper));
+ mWifiNetworkSelector = new WifiNetworkSelector(mContext, mScoringParams,
+ mWifiConfigManager, mClock,
mConnectivityLocalLog);
mWifiMetrics.setWifiNetworkSelector(mWifiNetworkSelector);
- mSavedNetworkEvaluator = new SavedNetworkEvaluator(mContext,
+ mSavedNetworkEvaluator = new SavedNetworkEvaluator(mContext, mScoringParams,
mWifiConfigManager, mClock, mConnectivityLocalLog, mWifiConnectivityHelper);
mScoredNetworkEvaluator = new ScoredNetworkEvaluator(context, wifiStateMachineLooper,
mFrameworkFacade, mNetworkScoreManager, mWifiConfigManager, mConnectivityLocalLog,
@@ -413,6 +417,10 @@ public class WifiInjector {
return mWakeupController;
}
+ public ScoringParams getScoringParams() {
+ return mScoringParams;
+ }
+
public TelephonyManager makeTelephonyManager() {
// may not be available when WiFi starts
return (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
@@ -507,7 +515,8 @@ public class WifiInjector {
*/
public WifiConnectivityManager makeWifiConnectivityManager(WifiInfo wifiInfo,
boolean hasConnectionRequests) {
- return new WifiConnectivityManager(mContext, mWifiStateMachine, getWifiScanner(),
+ return new WifiConnectivityManager(mContext, getScoringParams(),
+ mWifiStateMachine, getWifiScanner(),
mWifiConfigManager, wifiInfo, mWifiNetworkSelector, mWifiConnectivityHelper,
mWifiLastResortWatchdog, mOpenNetworkNotifier, mCarrierNetworkNotifier,
mCarrierNetworkConfig, mWifiMetrics, mWifiStateMachineHandlerThread.getLooper(),
diff --git a/service/java/com/android/server/wifi/WifiNetworkSelector.java b/service/java/com/android/server/wifi/WifiNetworkSelector.java
index dc854097b..97ef221e7 100644
--- a/service/java/com/android/server/wifi/WifiNetworkSelector.java
+++ b/service/java/com/android/server/wifi/WifiNetworkSelector.java
@@ -57,10 +57,7 @@ public class WifiNetworkSelector {
private volatile List<Pair<ScanDetail, WifiConfiguration>> mConnectableNetworks =
new ArrayList<>();
private List<ScanDetail> mFilteredNetworks = new ArrayList<>();
- private final int mThresholdQualifiedRssi24;
- private final int mThresholdQualifiedRssi5;
- private final int mThresholdMinimumRssi24;
- private final int mThresholdMinimumRssi5;
+ private final ScoringParams mScoringParams;
private final int mStayOnNetworkMinimumTxRate;
private final int mStayOnNetworkMinimumRxRate;
private final boolean mEnableAutoJoinWhenAssociated;
@@ -149,9 +146,8 @@ public class WifiNetworkSelector {
}
int currentRssi = wifiInfo.getRssi();
- boolean hasQualifiedRssi =
- (wifiInfo.is24GHz() && (currentRssi > mThresholdQualifiedRssi24))
- || (wifiInfo.is5GHz() && (currentRssi > mThresholdQualifiedRssi5));
+ boolean hasQualifiedRssi = currentRssi
+ > mScoringParams.getSufficientRssi(wifiInfo.getFrequency());
boolean hasActiveStream = (wifiInfo.txSuccessRate > mStayOnNetworkMinimumTxRate)
|| (wifiInfo.rxSuccessRate > mStayOnNetworkMinimumRxRate);
if (hasQualifiedRssi && hasActiveStream) {
@@ -262,8 +258,7 @@ public class WifiNetworkSelector {
* Compares ScanResult level against the minimum threshold for its band, returns true if lower
*/
public boolean isSignalTooWeak(ScanResult scanResult) {
- return ((scanResult.is24GHz() && scanResult.level < mThresholdMinimumRssi24)
- || (scanResult.is5GHz() && scanResult.level < mThresholdMinimumRssi5));
+ return (scanResult.level < mScoringParams.getEntryRssi(scanResult.frequency));
}
private List<ScanDetail> filterScanResults(List<ScanDetail> scanDetails,
@@ -597,20 +592,14 @@ public class WifiNetworkSelector {
return true;
}
- WifiNetworkSelector(Context context, WifiConfigManager configManager, Clock clock,
+ WifiNetworkSelector(Context context, ScoringParams scoringParams,
+ WifiConfigManager configManager, Clock clock,
LocalLog localLog) {
mWifiConfigManager = configManager;
mClock = clock;
+ mScoringParams = scoringParams;
mLocalLog = localLog;
- mThresholdQualifiedRssi24 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_low_rssi_threshold_24GHz);
- mThresholdQualifiedRssi5 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_low_rssi_threshold_5GHz);
- mThresholdMinimumRssi24 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz);
- mThresholdMinimumRssi5 = context.getResources().getInteger(
- R.integer.config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz);
mEnableAutoJoinWhenAssociated = context.getResources().getBoolean(
R.bool.config_wifi_framework_enable_associated_network_selection);
mStayOnNetworkMinimumTxRate = context.getResources().getInteger(
diff --git a/service/java/com/android/server/wifi/WifiScoreReport.java b/service/java/com/android/server/wifi/WifiScoreReport.java
index 162f627ae..3db76e8af 100644
--- a/service/java/com/android/server/wifi/WifiScoreReport.java
+++ b/service/java/com/android/server/wifi/WifiScoreReport.java
@@ -16,7 +16,6 @@
package com.android.server.wifi;
-import android.content.Context;
import android.net.NetworkAgent;
import android.net.wifi.WifiInfo;
import android.util.Log;
@@ -50,10 +49,10 @@ public class WifiScoreReport {
ConnectedScore mAggressiveConnectedScore;
VelocityBasedConnectedScore mFancyConnectedScore;
- WifiScoreReport(Context context, Clock clock) {
+ WifiScoreReport(ScoringParams scoringParams, Clock clock) {
mClock = clock;
- mAggressiveConnectedScore = new AggressiveConnectedScore(context, clock);
- mFancyConnectedScore = new VelocityBasedConnectedScore(context, clock);
+ mAggressiveConnectedScore = new AggressiveConnectedScore(scoringParams, clock);
+ mFancyConnectedScore = new VelocityBasedConnectedScore(scoringParams, clock);
}
/**
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index c5d946a8c..d24bc7db9 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -900,7 +900,7 @@ public class WifiStateMachine extends StateMachine {
mCountryCode = countryCode;
- mWifiScoreReport = new WifiScoreReport(mContext, mClock);
+ mWifiScoreReport = new WifiScoreReport(mWifiInjector.getScoringParams(), mClock);
mNetworkCapabilitiesFilter.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
mNetworkCapabilitiesFilter.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);