summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WifiTrackerLib/res/values-ar/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-bs/arrays.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-fa/arrays.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-fa/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-gu/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-hy/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-ky/arrays.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-mr/strings.xml2
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java3
-rw-r--r--service/java/com/android/server/wifi/DeviceConfigFacade.java35
-rw-r--r--service/java/com/android/server/wifi/WifiScoreReport.java63
-rw-r--r--service/res/values-eu/strings.xml2
-rw-r--r--service/res/values/config.xml3
-rw-r--r--service/res/values/overlayable.xml1
-rw-r--r--tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java10
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java154
16 files changed, 262 insertions, 25 deletions
diff --git a/libs/WifiTrackerLib/res/values-ar/strings.xml b/libs/WifiTrackerLib/res/values-ar/strings.xml
index ccb2dfa96..ef0f10748 100644
--- a/libs/WifiTrackerLib/res/values-ar/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ar/strings.xml
@@ -23,7 +23,7 @@
<string name="wifi_no_internet" msgid="4461212237521310895">"لا يتوفّر اتصال بالإنترنت"</string>
<string name="wifi_disabled_password_failure" msgid="3015007143699702403">"مشكلة في المصادقة"</string>
<string name="wifi_check_password_try_again" msgid="2643230209986217827">"يُرجى التحقق من كلمة المرور وإعادة المحاولة"</string>
- <string name="wifi_disabled_network_failure" msgid="6506742207778007439">"‏تعذّر إعداد عنوان IP"</string>
+ <string name="wifi_disabled_network_failure" msgid="6506742207778007439">"‏تعذّرت تهيئة عنوان IP"</string>
<string name="wifi_disabled_generic" msgid="8307050327779256414">"غير مفعّلة"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="6552198761671428871">"نقطة الوصول ممتلئة مؤقتًا"</string>
<string name="wifi_disconnected" msgid="3720926757662831062">"غير متصلة"</string>
diff --git a/libs/WifiTrackerLib/res/values-bs/arrays.xml b/libs/WifiTrackerLib/res/values-bs/arrays.xml
index 9428a3763..727f5d75a 100644
--- a/libs/WifiTrackerLib/res/values-bs/arrays.xml
+++ b/libs/WifiTrackerLib/res/values-bs/arrays.xml
@@ -27,7 +27,7 @@
<item msgid="1176401854208153464">"Autentifikacija…"</item>
<item msgid="1377026397901197257">"Dobivanje IP adrese…"</item>
<item msgid="7627139816052121509">"Povezano"</item>
- <item msgid="1598801023719359130">"Obustavljeno"</item>
+ <item msgid="1598801023719359130">"Suspendirano"</item>
<item msgid="9160765456671002324">"Prekidanje veze…"</item>
<item msgid="8013176736494493734">"Veza je prekinuta"</item>
<item msgid="4077393480368783785">"Neuspješno"</item>
diff --git a/libs/WifiTrackerLib/res/values-fa/arrays.xml b/libs/WifiTrackerLib/res/values-fa/arrays.xml
index 51ef4b84b..af40e8f4c 100644
--- a/libs/WifiTrackerLib/res/values-fa/arrays.xml
+++ b/libs/WifiTrackerLib/res/values-fa/arrays.xml
@@ -24,7 +24,7 @@
<item msgid="8763475525292171481"></item>
<item msgid="903308535197209786">"درحال اسکن کردن…"</item>
<item msgid="6222852518007967736">"درحال اتصال…"</item>
- <item msgid="1176401854208153464">"درحال اصالت‌سنجی…"</item>
+ <item msgid="1176401854208153464">"درحال احراز هویت…"</item>
<item msgid="1377026397901197257">"‏درحال دریافت نشانی IP…"</item>
<item msgid="7627139816052121509">"متصل"</item>
<item msgid="1598801023719359130">"معلق"</item>
diff --git a/libs/WifiTrackerLib/res/values-fa/strings.xml b/libs/WifiTrackerLib/res/values-fa/strings.xml
index dff0ebe00..70f79b695 100644
--- a/libs/WifiTrackerLib/res/values-fa/strings.xml
+++ b/libs/WifiTrackerLib/res/values-fa/strings.xml
@@ -21,7 +21,7 @@
<string name="saved_network" msgid="6241977554502802914">"ذخیره‌شده توسط <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifi_no_internet_no_reconnect" msgid="3089980800841926268">"اتصال به‌طور خودکار انجام نمی‌شود"</string>
<string name="wifi_no_internet" msgid="4461212237521310895">"بدون دسترسی به اینترنت"</string>
- <string name="wifi_disabled_password_failure" msgid="3015007143699702403">"مشکل اصالت‌سنجی"</string>
+ <string name="wifi_disabled_password_failure" msgid="3015007143699702403">"مشکل احراز هویت"</string>
<string name="wifi_check_password_try_again" msgid="2643230209986217827">"گذرواژه را بررسی و دوباره امتحان کنید"</string>
<string name="wifi_disabled_network_failure" msgid="6506742207778007439">"‏پیکربندی IP انجام نشد"</string>
<string name="wifi_disabled_generic" msgid="8307050327779256414">"غیرفعال شد"</string>
diff --git a/libs/WifiTrackerLib/res/values-gu/strings.xml b/libs/WifiTrackerLib/res/values-gu/strings.xml
index 181360418..e387dd397 100644
--- a/libs/WifiTrackerLib/res/values-gu/strings.xml
+++ b/libs/WifiTrackerLib/res/values-gu/strings.xml
@@ -33,7 +33,7 @@
<string name="connected_via_app" msgid="1818040967936972127">"<xliff:g id="NAME">%1$s</xliff:g> દ્વારા કનેક્ટ થયેલ"</string>
<string name="available_via_app" msgid="9110324040292242769">"<xliff:g id="NAME">%1$s</xliff:g> મારફતે ઉપલબ્ધ"</string>
<string name="connected_via_network_scorer" msgid="209764314005159012">"<xliff:g id="NAME">%1$s</xliff:g> મારફતે ઑટોમૅટિક રીતે કનેક્ટ કર્યું છે"</string>
- <string name="connected_via_network_scorer_default" msgid="3084818437004202462">"નેટવર્ક રેટિંગ પ્રદાતા દ્વારા ઑટોમૅટિક રીતે કનેક્ટ થયું"</string>
+ <string name="connected_via_network_scorer_default" msgid="3084818437004202462">"નેટવર્ક રેટિંગ પ્રદાતા દ્વારા આપમેળે કનેક્ટ થયું"</string>
<string name="wifi_limited_connection" msgid="3646701342701276239">"મર્યાદિત કનેક્શન"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"ખાનગી DNS સર્વર ઍક્સેસ કરી શકાતા નથી"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"કોઈ ઇન્ટરનેટ નથી"</string>
diff --git a/libs/WifiTrackerLib/res/values-hy/strings.xml b/libs/WifiTrackerLib/res/values-hy/strings.xml
index 34c1fbdf3..60b2389c4 100644
--- a/libs/WifiTrackerLib/res/values-hy/strings.xml
+++ b/libs/WifiTrackerLib/res/values-hy/strings.xml
@@ -49,7 +49,7 @@
<string name="imsi_protection_warning" msgid="3207104049473134195">"Այս ցանցը ստանում է եզակի ID, որի օգնությամբ հնարավոր է հետագծել սարքի տեղադրությունը։ "<annotation id="url">"Իմանալ ավելին"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Շատ դանդաղ"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Դանդաղ"</string>
- <string name="speed_label_okay" msgid="3741857805086997968">"Լավ"</string>
+ <string name="speed_label_okay" msgid="3741857805086997968">"Հաստատել"</string>
<string name="speed_label_medium" msgid="3175703848952862009">"Միջին"</string>
<string name="speed_label_fast" msgid="8344116097613544322">"Արագ"</string>
<string name="speed_label_very_fast" msgid="1595806641512447877">"Շատ արագ"</string>
diff --git a/libs/WifiTrackerLib/res/values-ky/arrays.xml b/libs/WifiTrackerLib/res/values-ky/arrays.xml
index 00ab8f678..8bcf77784 100644
--- a/libs/WifiTrackerLib/res/values-ky/arrays.xml
+++ b/libs/WifiTrackerLib/res/values-ky/arrays.xml
@@ -26,7 +26,7 @@
<item msgid="6222852518007967736">"Туташууда…"</item>
<item msgid="1176401854208153464">"Аныктыгы текшерилүүдө…"</item>
<item msgid="1377026397901197257">"IP дареги алынууда…"</item>
- <item msgid="7627139816052121509">"Туташып турат"</item>
+ <item msgid="7627139816052121509">"Туташты"</item>
<item msgid="1598801023719359130">"Убактылуу токтотулду"</item>
<item msgid="9160765456671002324">"Ажыратылууда…"</item>
<item msgid="8013176736494493734">"Ажыратылды"</item>
diff --git a/libs/WifiTrackerLib/res/values-mr/strings.xml b/libs/WifiTrackerLib/res/values-mr/strings.xml
index 718d484d3..fc7811f18 100644
--- a/libs/WifiTrackerLib/res/values-mr/strings.xml
+++ b/libs/WifiTrackerLib/res/values-mr/strings.xml
@@ -23,7 +23,7 @@
<string name="wifi_no_internet" msgid="4461212237521310895">"इंटरनेट अ‍ॅक्सेस नाही"</string>
<string name="wifi_disabled_password_failure" msgid="3015007143699702403">"ऑथेंटिकेशन समस्या"</string>
<string name="wifi_check_password_try_again" msgid="2643230209986217827">"पासवर्ड तपासा आणि पुन्‍हा प्रयत्‍न करा"</string>
- <string name="wifi_disabled_network_failure" msgid="6506742207778007439">"IP कॉंफिगरेशन अयशस्वी"</string>
+ <string name="wifi_disabled_network_failure" msgid="6506742207778007439">"IP कॉन्फिगरेशन अयशस्वी"</string>
<string name="wifi_disabled_generic" msgid="8307050327779256414">"अक्षम"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="6552198761671428871">"अ‍ॅक्सेस पॉइंट तात्पुरते भरलेले"</string>
<string name="wifi_disconnected" msgid="3720926757662831062">"डिस्कनेक्ट केले"</string>
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index 6c31185da..e90064679 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -811,7 +811,8 @@ public class ClientModeImpl extends StateMachine {
mWifiScoreReport = new WifiScoreReport(mWifiInjector.getScoringParams(), mClock,
mWifiMetrics, mWifiInfo, mWifiNative, mBssidBlocklistMonitor,
- mWifiInjector.getWifiThreadRunner());
+ mWifiInjector.getWifiThreadRunner(), mWifiInjector.getDeviceConfigFacade(),
+ mContext);
mNetworkCapabilitiesFilter = new NetworkCapabilities.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
diff --git a/service/java/com/android/server/wifi/DeviceConfigFacade.java b/service/java/com/android/server/wifi/DeviceConfigFacade.java
index 0b707701f..3856ff1fd 100644
--- a/service/java/com/android/server/wifi/DeviceConfigFacade.java
+++ b/service/java/com/android/server/wifi/DeviceConfigFacade.java
@@ -129,6 +129,16 @@ public class DeviceConfigFacade {
// Default health monitor firmware alert valid time.
// -1 disables firmware alert time check
static final int DEFAULT_HEALTH_MONITOR_FW_ALERT_VALID_TIME_MS = -1;
+ // Default minimum confirmation duration for sending network score to connectivity service
+ // when score breaches low. The actual confirmation duration is longer in general and it
+ // depends on the score evaluation period normally controlled by
+ // 'com.android.wifi.resources.R' config_wifiPollRssiIntervalMilliseconds.
+ static final int DEFAULT_MIN_CONFIRMATION_DURATION_SEND_LOW_SCORE_MS = 5000;
+ // Default minimum confirmation duration for sending network score to connectivity service
+ // when score breaches high. The actual confirmation duration is longer in general and it
+ // depends on the score evaluation period normally controlled by
+ // 'com.android.wifi.resources.R' config_wifiPollRssiIntervalMilliseconds.
+ static final int DEFAULT_MIN_CONFIRMATION_DURATION_SEND_HIGH_SCORE_MS = 0;
// Cached values of fields updated via updateDeviceConfigFlags()
private boolean mIsAbnormalConnectionBugreportEnabled;
private int mAbnormalConnectionDurationMs;
@@ -177,6 +187,8 @@ public class DeviceConfigFacade {
private int mNonstationaryScanRssiValidTimeMs;
private int mStationaryScanRssiValidTimeMs;
private int mHealthMonitorFwAlertValidTimeMs;
+ private int mMinConfirmationDurationSendLowScoreMs;
+ private int mMinConfirmationDurationSendHighScoreMs;
public DeviceConfigFacade(Context context, Handler handler, WifiMetrics wifiMetrics) {
mContext = context;
@@ -324,7 +336,12 @@ public class DeviceConfigFacade {
"health_monitor_fw_alert_valid_time_ms",
DEFAULT_HEALTH_MONITOR_FW_ALERT_VALID_TIME_MS);
mWifiMetrics.setHealthMonitorRssiPollValidTimeMs(mHealthMonitorRssiPollValidTimeMs);
-
+ mMinConfirmationDurationSendLowScoreMs = DeviceConfig.getInt(NAMESPACE,
+ "min_confirmation_duration_send_low_score_ms",
+ DEFAULT_MIN_CONFIRMATION_DURATION_SEND_LOW_SCORE_MS);
+ mMinConfirmationDurationSendHighScoreMs = DeviceConfig.getInt(NAMESPACE,
+ "min_confirmation_duration_send_high_score_ms",
+ DEFAULT_MIN_CONFIRMATION_DURATION_SEND_HIGH_SCORE_MS);
}
private Set<String> getUnmodifiableSetQuoted(String key) {
@@ -673,4 +690,20 @@ public class DeviceConfigFacade {
public int getHealthMonitorFwAlertValidTimeMs() {
return mHealthMonitorFwAlertValidTimeMs;
}
+
+ /**
+ * Gets the minimum confirmation duration for sending network score to connectivity service
+ * when score breaches low.
+ */
+ public int getMinConfirmationDurationSendLowScoreMs() {
+ return mMinConfirmationDurationSendLowScoreMs;
+ }
+
+ /**
+ * Gets the minimum confirmation duration for sending network score to connectivity service
+ * when score breaches high.
+ */
+ public int getMinConfirmationDurationSendHighScoreMs() {
+ return mMinConfirmationDurationSendHighScoreMs;
+ }
}
diff --git a/service/java/com/android/server/wifi/WifiScoreReport.java b/service/java/com/android/server/wifi/WifiScoreReport.java
index fa0ba6a3c..a2c3e6c62 100644
--- a/service/java/com/android/server/wifi/WifiScoreReport.java
+++ b/service/java/com/android/server/wifi/WifiScoreReport.java
@@ -16,6 +16,7 @@
package com.android.server.wifi;
+import android.content.Context;
import android.net.Network;
import android.net.NetworkAgent;
import android.net.wifi.IScoreUpdateObserver;
@@ -26,6 +27,8 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
+import com.android.wifi.resources.R;
+
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
@@ -62,7 +65,9 @@ public class WifiScoreReport {
private int mSessionNumber = 0; // not to be confused with sessionid, this just counts resets
private String mInterfaceName;
private final BssidBlocklistMonitor mBssidBlocklistMonitor;
- private long mLastScoreBreachLowTimeMillis = -1;
+ private final Context mContext;
+ private long mLastScoreBreachLowTimeMillis = INVALID_WALL_CLOCK_MILLIS;
+ private long mLastScoreBreachHighTimeMillis = INVALID_WALL_CLOCK_MILLIS;
ConnectedScore mAggressiveConnectedScore;
VelocityBasedConnectedScore mVelocityBasedConnectedScore;
@@ -72,6 +77,7 @@ public class WifiScoreReport {
WifiInfo mWifiInfo;
WifiNative mWifiNative;
WifiThreadRunner mWifiThreadRunner;
+ DeviceConfigFacade mDeviceConfigFacade;
/**
* Callback proxy. See {@link android.net.wifi.WifiManager.ScoreUpdateObserver}.
@@ -89,10 +95,6 @@ public class WifiScoreReport {
+ " score=" + score);
return;
}
- if (mNetworkAgent != null) {
- mNetworkAgent.sendNetworkScore(score);
- }
-
long millis = mClock.getWallClockMillis();
if (score < ConnectedScore.WIFI_TRANSITION_SCORE) {
if (mScore >= ConnectedScore.WIFI_TRANSITION_SCORE) {
@@ -101,7 +103,14 @@ public class WifiScoreReport {
} else {
mLastScoreBreachLowTimeMillis = INVALID_WALL_CLOCK_MILLIS;
}
-
+ if (score > ConnectedScore.WIFI_TRANSITION_SCORE) {
+ if (mScore <= ConnectedScore.WIFI_TRANSITION_SCORE) {
+ mLastScoreBreachHighTimeMillis = millis;
+ }
+ } else {
+ mLastScoreBreachHighTimeMillis = INVALID_WALL_CLOCK_MILLIS;
+ }
+ reportNetworkScoreToConnectivityServiceIfNecessary(score);
mScore = score;
updateWifiMetrics(millis, -1, mScore);
});
@@ -167,6 +176,34 @@ public class WifiScoreReport {
}
/**
+ * Report network score to connectivity service.
+ */
+ private void reportNetworkScoreToConnectivityServiceIfNecessary(int score) {
+ if (mNetworkAgent == null) {
+ return;
+ }
+ if (mWifiConnectedNetworkScorerHolder == null && score == mWifiInfo.getScore()) {
+ return;
+ }
+ if (mWifiConnectedNetworkScorerHolder != null
+ && mContext.getResources().getBoolean(
+ R.bool.config_wifiMinConfirmationDurationSendNetworkScoreEnabled)) {
+ long millis = mClock.getWallClockMillis();
+ if (mLastScoreBreachLowTimeMillis != INVALID_WALL_CLOCK_MILLIS
+ && (millis - mLastScoreBreachLowTimeMillis)
+ < mDeviceConfigFacade.getMinConfirmationDurationSendLowScoreMs()) {
+ return;
+ }
+ if (mLastScoreBreachHighTimeMillis != INVALID_WALL_CLOCK_MILLIS
+ && (millis - mLastScoreBreachHighTimeMillis)
+ < mDeviceConfigFacade.getMinConfirmationDurationSendHighScoreMs()) {
+ return;
+ }
+ }
+ mNetworkAgent.sendNetworkScore(score);
+ }
+
+ /**
* Container for storing info about external scorer and tracking its death.
*/
private final class WifiConnectedNetworkScorerHolder implements IBinder.DeathRecipient {
@@ -251,7 +288,8 @@ public class WifiScoreReport {
WifiScoreReport(ScoringParams scoringParams, Clock clock, WifiMetrics wifiMetrics,
WifiInfo wifiInfo, WifiNative wifiNative, BssidBlocklistMonitor bssidBlocklistMonitor,
- WifiThreadRunner wifiThreadRunner) {
+ WifiThreadRunner wifiThreadRunner, DeviceConfigFacade deviceConfigFacade,
+ Context context) {
mScoringParams = scoringParams;
mClock = clock;
mAggressiveConnectedScore = new AggressiveConnectedScore(scoringParams, clock);
@@ -261,6 +299,8 @@ public class WifiScoreReport {
mWifiNative = wifiNative;
mBssidBlocklistMonitor = bssidBlocklistMonitor;
mWifiThreadRunner = wifiThreadRunner;
+ mDeviceConfigFacade = deviceConfigFacade;
+ mContext = context;
}
/**
@@ -276,6 +316,7 @@ public class WifiScoreReport {
}
mLastDownwardBreachTimeMillis = 0;
mLastScoreBreachLowTimeMillis = INVALID_WALL_CLOCK_MILLIS;
+ mLastScoreBreachHighTimeMillis = INVALID_WALL_CLOCK_MILLIS;
if (mVerboseLoggingEnabled) Log.d(TAG, "reset");
}
@@ -357,12 +398,7 @@ public class WifiScoreReport {
}
//report score
- if (score != mWifiInfo.getScore()) {
- if (mNetworkAgent != null) {
- mNetworkAgent.sendNetworkScore(score);
- }
- }
-
+ reportNetworkScoreToConnectivityServiceIfNecessary(score);
updateWifiMetrics(millis, s2, score);
mScore = score;
}
@@ -611,6 +647,7 @@ public class WifiScoreReport {
}
mWifiConnectedNetworkScorerHolder.startSession(sessionId);
mLastScoreBreachLowTimeMillis = INVALID_WALL_CLOCK_MILLIS;
+ mLastScoreBreachHighTimeMillis = INVALID_WALL_CLOCK_MILLIS;
}
/**
diff --git a/service/res/values-eu/strings.xml b/service/res/values-eu/strings.xml
index 822d724e1..b1f1fed87 100644
--- a/service/res/values-eu/strings.xml
+++ b/service/res/values-eu/strings.xml
@@ -55,7 +55,7 @@
<string name="wifi_p2p_invitation_sent_title" msgid="6684220950195735982">"Gonbidapena bidali da"</string>
<string name="wifi_p2p_invitation_to_connect_title" msgid="5020192895172598089">"Konektatzeko gonbidapena"</string>
<string name="wifi_p2p_from_message" msgid="3857436922001981191">"Igorlea:"</string>
- <string name="wifi_p2p_to_message" msgid="6664932426704362946">"Hartzailea:"</string>
+ <string name="wifi_p2p_to_message" msgid="6664932426704362946">"Hartzaileak:"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5661843905965463456">"Idatzi beharrezko PINa:"</string>
<string name="wifi_p2p_show_pin_message" msgid="4332876077723766909">"PINa:"</string>
<string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="3372859876274663802">"Tableta wifi-saretik deskonektatuko da <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailura konektatuta dagoen bitartean"</string>
diff --git a/service/res/values/config.xml b/service/res/values/config.xml
index cc80f608c..a0c73cc3b 100644
--- a/service/res/values/config.xml
+++ b/service/res/values/config.xml
@@ -462,4 +462,7 @@
<!-- integer indicating additional disconnect delay (in ms) after IMS onLost() indication is received -->
<integer translatable="false" name="config_wifiDelayDisconnectOnImsLostMs">0</integer>
+
+ <!-- Enable adding minimum confirmation duration when sending network score to connectivity service. -->
+ <bool translatable="false" name="config_wifiMinConfirmationDurationSendNetworkScoreEnabled">false</bool>
</resources>
diff --git a/service/res/values/overlayable.xml b/service/res/values/overlayable.xml
index a4b7011b0..882890f17 100644
--- a/service/res/values/overlayable.xml
+++ b/service/res/values/overlayable.xml
@@ -144,6 +144,7 @@
<item type="integer" name="config_wifiMovingPnoScanIntervalMillis" />
<item type="integer" name="config_wifiStationaryPnoScanIntervalMillis" />
<item type="integer" name="config_wifiDelayDisconnectOnImsLostMs" />
+ <item type="bool" name="config_wifiMinConfirmationDurationSendNetworkScoreEnabled" />
<!-- Params from config.xml that can be overlayed -->
<!-- Params from strings.xml that can be overlayed -->
diff --git a/tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java b/tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java
index bb03d42d7..43a16fe4c 100644
--- a/tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java
@@ -205,6 +205,10 @@ public class DeviceConfigFacadeTest extends WifiBaseTest {
mDeviceConfigFacade.getStationaryScanRssiValidTimeMs());
assertEquals(DeviceConfigFacade.DEFAULT_HEALTH_MONITOR_FW_ALERT_VALID_TIME_MS,
mDeviceConfigFacade.getHealthMonitorFwAlertValidTimeMs());
+ assertEquals(DeviceConfigFacade.DEFAULT_MIN_CONFIRMATION_DURATION_SEND_LOW_SCORE_MS,
+ mDeviceConfigFacade.getMinConfirmationDurationSendLowScoreMs());
+ assertEquals(DeviceConfigFacade.DEFAULT_MIN_CONFIRMATION_DURATION_SEND_HIGH_SCORE_MS,
+ mDeviceConfigFacade.getMinConfirmationDurationSendHighScoreMs());
}
/**
@@ -307,6 +311,10 @@ public class DeviceConfigFacadeTest extends WifiBaseTest {
anyInt())).thenReturn(3000);
when(DeviceConfig.getInt(anyString(), eq("health_monitor_fw_alert_valid_time_ms"),
anyInt())).thenReturn(1000);
+ when(DeviceConfig.getInt(anyString(), eq("min_confirmation_duration_send_low_score_ms"),
+ anyInt())).thenReturn(4000);
+ when(DeviceConfig.getInt(anyString(), eq("min_confirmation_duration_send_high_score_ms"),
+ anyInt())).thenReturn(1000);
mOnPropertiesChangedListenerCaptor.getValue().onPropertiesChanged(null);
// Verifying fields are updated to the new values
@@ -363,5 +371,7 @@ public class DeviceConfigFacadeTest extends WifiBaseTest {
assertEquals(4000, mDeviceConfigFacade.getNonstationaryScanRssiValidTimeMs());
assertEquals(3000, mDeviceConfigFacade.getStationaryScanRssiValidTimeMs());
assertEquals(1000, mDeviceConfigFacade.getHealthMonitorFwAlertValidTimeMs());
+ assertEquals(4000, mDeviceConfigFacade.getMinConfirmationDurationSendLowScoreMs());
+ assertEquals(1000, mDeviceConfigFacade.getMinConfirmationDurationSendHighScoreMs());
}
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java b/tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java
index 674ff8c9d..7ba931523 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java
@@ -101,6 +101,7 @@ public class WifiScoreReportTest extends WifiBaseTest {
@Mock WifiNative mWifiNative;
@Mock BssidBlocklistMonitor mBssidBlocklistMonitor;
@Mock Network mNetwork;
+ @Mock DeviceConfigFacade mDeviceConfigFacade;
private TestLooper mLooper;
public class WifiConnectedNetworkScorerImpl extends IWifiConnectedNetworkScorer.Stub {
@@ -174,6 +175,9 @@ public class WifiScoreReportTest extends WifiBaseTest {
when(resources.getInteger(
R.integer.config_wifiFrameworkMinPacketPerSecondHighTraffic))
.thenReturn(100);
+ when(resources.getBoolean(
+ R.bool.config_wifiMinConfirmationDurationSendNetworkScoreEnabled))
+ .thenReturn(false);
}
/**
@@ -197,8 +201,13 @@ public class WifiScoreReportTest extends WifiBaseTest {
mScoringParams = new ScoringParams();
mWifiThreadRunner = new WifiThreadRunner(new Handler(mLooper.getLooper()));
mWifiScoreReport = new WifiScoreReport(mScoringParams, mClock, mWifiMetrics, mWifiInfo,
- mWifiNative, mBssidBlocklistMonitor, mWifiThreadRunner);
+ mWifiNative, mBssidBlocklistMonitor, mWifiThreadRunner,
+ mDeviceConfigFacade, mContext);
mWifiScoreReport.setNetworkAgent(mNetworkAgent);
+ when(mDeviceConfigFacade.getMinConfirmationDurationSendLowScoreMs()).thenReturn(
+ DeviceConfigFacade.DEFAULT_MIN_CONFIRMATION_DURATION_SEND_LOW_SCORE_MS);
+ when(mDeviceConfigFacade.getMinConfirmationDurationSendHighScoreMs()).thenReturn(
+ DeviceConfigFacade.DEFAULT_MIN_CONFIRMATION_DURATION_SEND_HIGH_SCORE_MS);
}
/**
@@ -833,4 +842,147 @@ public class WifiScoreReportTest extends WifiBaseTest {
mLooper.dispatchAll();
verify(mBssidBlocklistMonitor, never()).blockBssidForDurationMs(any(), any(), anyLong());
}
+
+ /**
+ * Verify confirmation duration is not added when it is not enabled in config overlay by default
+ */
+ @Test
+ public void confirmationDurationIsNotAddedWhenItIsNotEnabledInConfigOverlay() throws Exception {
+ WifiConnectedNetworkScorerImpl scorerImpl = new WifiConnectedNetworkScorerImpl();
+ // Register Client for verification.
+ mWifiScoreReport.setWifiConnectedNetworkScorer(mAppBinder, scorerImpl);
+ when(mNetwork.getNetId()).thenReturn(TEST_NETWORK_ID);
+ mWifiScoreReport.startConnectedNetworkScorer(TEST_NETWORK_ID);
+ mClock.mStepMillis = 0;
+
+ mClock.mWallClockMillis = 10;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 49);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(anyInt());
+ }
+
+ /**
+ * Verify confirmation duration is not added when there is no score breacht
+ */
+ @Test
+ public void confirmationDurationIsNotAddedWhenThereIsNoScoreBreach() throws Exception {
+ WifiConnectedNetworkScorerImpl scorerImpl = new WifiConnectedNetworkScorerImpl();
+ // Register Client for verification.
+ mWifiScoreReport.setWifiConnectedNetworkScorer(mAppBinder, scorerImpl);
+ when(mNetwork.getNetId()).thenReturn(TEST_NETWORK_ID);
+ mWifiScoreReport.startConnectedNetworkScorer(TEST_NETWORK_ID);
+ mClock.mStepMillis = 0;
+ when(mContext.getResources().getBoolean(
+ R.bool.config_wifiMinConfirmationDurationSendNetworkScoreEnabled)).thenReturn(true);
+
+ mClock.mWallClockMillis = 10;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 60);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(60);
+ mClock.mWallClockMillis = 3010;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 59);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(59);
+ mClock.mWallClockMillis = 6010;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 58);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(58);
+ }
+
+ /**
+ * Verify confirmation duration is added for reporting low score when it is enabled in
+ * config overlay
+ */
+ @Test
+ public void confirmationDurationIsAddedForSendingLowScore() throws Exception {
+ WifiConnectedNetworkScorerImpl scorerImpl = new WifiConnectedNetworkScorerImpl();
+ // Register Client for verification.
+ mWifiScoreReport.setWifiConnectedNetworkScorer(mAppBinder, scorerImpl);
+ when(mNetwork.getNetId()).thenReturn(TEST_NETWORK_ID);
+ mWifiScoreReport.startConnectedNetworkScorer(TEST_NETWORK_ID);
+ mClock.mStepMillis = 0;
+ when(mContext.getResources().getBoolean(
+ R.bool.config_wifiMinConfirmationDurationSendNetworkScoreEnabled)).thenReturn(true);
+
+ mClock.mWallClockMillis = 10;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 49);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent, never()).sendNetworkScore(anyInt());
+ mClock.mWallClockMillis = 10
+ + mDeviceConfigFacade.DEFAULT_MIN_CONFIRMATION_DURATION_SEND_LOW_SCORE_MS - 1;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 48);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent, never()).sendNetworkScore(anyInt());
+ mClock.mWallClockMillis = 10
+ + mDeviceConfigFacade.DEFAULT_MIN_CONFIRMATION_DURATION_SEND_LOW_SCORE_MS;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 47);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(47);
+ mClock.mWallClockMillis = 10
+ + mDeviceConfigFacade.DEFAULT_MIN_CONFIRMATION_DURATION_SEND_LOW_SCORE_MS + 3000;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 46);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(46);
+ }
+
+ /**
+ * Verify confirmation duration is not added for reporting high score with default zero value
+ */
+ @Test
+ public void confirmationDurationIsNotAddedForSendingHighScore() throws Exception {
+ WifiConnectedNetworkScorerImpl scorerImpl = new WifiConnectedNetworkScorerImpl();
+ // Register Client for verification.
+ mWifiScoreReport.setWifiConnectedNetworkScorer(mAppBinder, scorerImpl);
+ when(mNetwork.getNetId()).thenReturn(TEST_NETWORK_ID);
+ mWifiScoreReport.startConnectedNetworkScorer(TEST_NETWORK_ID);
+ mClock.mStepMillis = 0;
+ when(mContext.getResources().getBoolean(
+ R.bool.config_wifiMinConfirmationDurationSendNetworkScoreEnabled)).thenReturn(true);
+
+ mClock.mWallClockMillis = 10;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 49);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent, never()).sendNetworkScore(anyInt());
+ mClock.mWallClockMillis = 3000;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 51);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(51);
+ mClock.mWallClockMillis = 6000;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 52);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(52);
+ }
+
+ /**
+ * Verify confirmation duration is added for reporting high score with non-zero value
+ */
+ @Test
+ public void confirmationDurationIsAddedForSendingHighScore() throws Exception {
+ WifiConnectedNetworkScorerImpl scorerImpl = new WifiConnectedNetworkScorerImpl();
+ // Register Client for verification.
+ mWifiScoreReport.setWifiConnectedNetworkScorer(mAppBinder, scorerImpl);
+ when(mNetwork.getNetId()).thenReturn(TEST_NETWORK_ID);
+ mWifiScoreReport.startConnectedNetworkScorer(TEST_NETWORK_ID);
+ mClock.mStepMillis = 0;
+ when(mContext.getResources().getBoolean(
+ R.bool.config_wifiMinConfirmationDurationSendNetworkScoreEnabled)).thenReturn(true);
+ when(mDeviceConfigFacade.getMinConfirmationDurationSendHighScoreMs()).thenReturn(4000);
+
+ mClock.mWallClockMillis = 10;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 49);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent, never()).sendNetworkScore(anyInt());
+ mClock.mWallClockMillis = 3000;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 51);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent, never()).sendNetworkScore(anyInt());
+ mClock.mWallClockMillis = 6999;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 52);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent, never()).sendNetworkScore(anyInt());
+ mClock.mWallClockMillis = 7000;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 53);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(53);
+ }
}