diff options
Diffstat (limited to 'service')
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); |