summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WifiTrackerLib/res/values-af/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-am/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ar/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-as/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-az/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-b+sr+Latn/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-be/strings.xml7
-rw-r--r--libs/WifiTrackerLib/res/values-bg/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-bn/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-bs/arrays.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-bs/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ca/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-cs/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-da/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-de/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-el/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-en-rAU/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-en-rCA/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-en-rGB/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-en-rIN/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-en-rXC/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-es-rUS/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-es/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-et/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-eu/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-fa/arrays.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-fa/strings.xml9
-rw-r--r--libs/WifiTrackerLib/res/values-fi/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-fr-rCA/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-fr/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-gl/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-gu/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-hi/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-hr/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-hu/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-hy/strings.xml7
-rw-r--r--libs/WifiTrackerLib/res/values-in/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-is/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-it/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-iw/strings.xml13
-rw-r--r--libs/WifiTrackerLib/res/values-ja/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ka/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-kk/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-km/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-kn/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ko/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ky/arrays.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-ky/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-lo/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-lt/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-lv/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-mk/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-ml/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-mn/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-mr/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-ms/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-my/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-nb/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ne/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-nl/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-or/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-pa/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-pl/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-pt-rBR/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-pt-rPT/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-pt/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ro/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ru/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-si/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-sk/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-sl/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-sq/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-sr/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-sv/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-sw/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ta/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-te/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-th/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-tl/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-tr/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-uk/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-ur/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-uz/strings.xml5
-rw-r--r--libs/WifiTrackerLib/res/values-vi/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-zh-rCN/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-zh-rHK/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-zh-rTW/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values-zu/strings.xml3
-rw-r--r--libs/WifiTrackerLib/res/values/strings.xml5
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java81
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java55
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java33
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java71
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java40
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java58
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java60
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java5
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java54
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java19
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java84
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java234
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java99
-rw-r--r--libwifi_hal/Android.mk2
-rw-r--r--service/AndroidManifest_Resources.xml1
-rw-r--r--service/java/com/android/server/wifi/ActiveModeWarden.java3
-rw-r--r--service/java/com/android/server/wifi/BaseWifiService.java12
-rw-r--r--service/java/com/android/server/wifi/BssidBlocklistMonitor.java204
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java137
-rw-r--r--service/java/com/android/server/wifi/ConnectToNetworkNotificationBuilder.java3
-rw-r--r--service/java/com/android/server/wifi/DeviceConfigFacade.java50
-rw-r--r--service/java/com/android/server/wifi/EapFailureNotifier.java24
-rw-r--r--service/java/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreData.java2
-rw-r--r--service/java/com/android/server/wifi/MboOceConstants.java4
-rw-r--r--service/java/com/android/server/wifi/MboOceController.java4
-rw-r--r--service/java/com/android/server/wifi/NetworkSuggestionNominator.java2
-rw-r--r--service/java/com/android/server/wifi/ScanRequestProxy.java3
-rw-r--r--service/java/com/android/server/wifi/SimRequiredNotifier.java49
-rw-r--r--service/java/com/android/server/wifi/SoftApManager.java25
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java51
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_1Impl.java10
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_2Impl.java10
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_3Impl.java49
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaIfaceHal.java13
-rw-r--r--service/java/com/android/server/wifi/WifiCarrierInfoManager.java22
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java13
-rw-r--r--service/java/com/android/server/wifi/WifiConfigurationUtil.java26
-rw-r--r--service/java/com/android/server/wifi/WifiConnectivityManager.java40
-rw-r--r--service/java/com/android/server/wifi/WifiDiagnostics.java8
-rw-r--r--service/java/com/android/server/wifi/WifiHealthMonitor.java28
-rw-r--r--service/java/com/android/server/wifi/WifiInjector.java14
-rw-r--r--service/java/com/android/server/wifi/WifiKeyStore.java129
-rw-r--r--service/java/com/android/server/wifi/WifiMetrics.java159
-rw-r--r--service/java/com/android/server/wifi/WifiMonitor.java20
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkFactory.java59
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkSelector.java15
-rw-r--r--service/java/com/android/server/wifi/WifiScoreCard.java9
-rw-r--r--service/java/com/android/server/wifi/WifiScoreReport.java162
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java51
-rw-r--r--service/java/com/android/server/wifi/WifiStaStateNotifier.java72
-rw-r--r--service/java/com/android/server/wifi/aware/WifiAwareClientState.java13
-rw-r--r--service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java33
-rw-r--r--service/java/com/android/server/wifi/aware/WifiAwareDiscoverySessionState.java4
-rw-r--r--service/java/com/android/server/wifi/aware/WifiAwareNativeApi.java5
-rw-r--r--service/java/com/android/server/wifi/aware/WifiAwareStateManager.java91
-rw-r--r--service/java/com/android/server/wifi/hotspot2/PasspointManager.java16
-rw-r--r--service/java/com/android/server/wifi/p2p/SupplicantP2pIfaceHal.java15
-rw-r--r--service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java56
-rw-r--r--service/java/com/android/server/wifi/util/ApConfigUtil.java3
-rw-r--r--service/java/com/android/server/wifi/util/InformationElementUtil.java12
-rw-r--r--service/java/com/android/server/wifi/util/MetricsUtils.java65
-rw-r--r--service/java/com/android/server/wifi/util/ScanResultUtil.java4
-rw-r--r--service/proto/src/metrics.proto87
-rw-r--r--service/res/values-af/strings.xml6
-rw-r--r--service/res/values-am/strings.xml6
-rw-r--r--service/res/values-ar/strings.xml6
-rw-r--r--service/res/values-as/strings.xml6
-rw-r--r--service/res/values-az/strings.xml6
-rw-r--r--service/res/values-b+sr+Latn/strings.xml24
-rw-r--r--service/res/values-be/strings.xml6
-rw-r--r--service/res/values-bg/strings.xml6
-rw-r--r--service/res/values-bn/strings.xml6
-rw-r--r--service/res/values-bs/strings.xml6
-rw-r--r--service/res/values-ca/strings.xml6
-rw-r--r--service/res/values-cs/strings.xml6
-rw-r--r--service/res/values-da/strings.xml6
-rw-r--r--service/res/values-de/strings.xml6
-rw-r--r--service/res/values-el/strings.xml6
-rw-r--r--service/res/values-en-rAU/strings.xml6
-rw-r--r--service/res/values-en-rCA/strings.xml6
-rw-r--r--service/res/values-en-rGB/strings.xml6
-rw-r--r--service/res/values-en-rIN/strings.xml6
-rw-r--r--service/res/values-en-rXC/strings.xml84
-rw-r--r--service/res/values-es-rUS/strings.xml6
-rw-r--r--service/res/values-es/strings.xml6
-rw-r--r--service/res/values-et/strings.xml6
-rw-r--r--service/res/values-eu/strings.xml8
-rw-r--r--service/res/values-fa/strings.xml20
-rw-r--r--service/res/values-fi/strings.xml6
-rw-r--r--service/res/values-fr-rCA/strings.xml6
-rw-r--r--service/res/values-fr/strings.xml6
-rw-r--r--service/res/values-gl/strings.xml6
-rw-r--r--service/res/values-gu/strings.xml10
-rw-r--r--service/res/values-hi/strings.xml6
-rw-r--r--service/res/values-hr/strings.xml6
-rw-r--r--service/res/values-hu/strings.xml6
-rw-r--r--service/res/values-hy/strings.xml10
-rw-r--r--service/res/values-in/strings.xml6
-rw-r--r--service/res/values-is/strings.xml6
-rw-r--r--service/res/values-it/strings.xml6
-rw-r--r--service/res/values-iw/strings.xml8
-rw-r--r--service/res/values-ja/strings.xml6
-rw-r--r--service/res/values-ka/strings.xml6
-rw-r--r--service/res/values-kk/strings.xml6
-rw-r--r--service/res/values-km/strings.xml6
-rw-r--r--service/res/values-kn/strings.xml6
-rw-r--r--service/res/values-ko/strings.xml6
-rw-r--r--service/res/values-ky/strings.xml6
-rw-r--r--service/res/values-lo/strings.xml6
-rw-r--r--service/res/values-lt/strings.xml6
-rw-r--r--service/res/values-lv/strings.xml6
-rw-r--r--service/res/values-mcc310-mnc004-b+sr+Latn/strings.xml14
-rw-r--r--service/res/values-mcc310-mnc004-en-rXC/strings.xml26
-rw-r--r--service/res/values-mcc310-mnc004-sr/strings.xml14
-rw-r--r--service/res/values-mcc310-mnc004-ta/strings.xml14
-rw-r--r--service/res/values-mcc311-mnc480-b+sr+Latn/strings.xml14
-rw-r--r--service/res/values-mcc311-mnc480-en-rXC/strings.xml26
-rw-r--r--service/res/values-mcc311-mnc480-sr/strings.xml14
-rw-r--r--service/res/values-mcc311-mnc480-ta/strings.xml14
-rw-r--r--service/res/values-mk/strings.xml10
-rw-r--r--service/res/values-ml/strings.xml6
-rw-r--r--service/res/values-mn/strings.xml10
-rw-r--r--service/res/values-mr/strings.xml6
-rw-r--r--service/res/values-ms/strings.xml6
-rw-r--r--service/res/values-my/strings.xml6
-rw-r--r--service/res/values-nb/strings.xml6
-rw-r--r--service/res/values-ne/strings.xml6
-rw-r--r--service/res/values-nl/strings.xml6
-rw-r--r--service/res/values-or/strings.xml6
-rw-r--r--service/res/values-pa/strings.xml6
-rw-r--r--service/res/values-pl/strings.xml6
-rw-r--r--service/res/values-pt-rBR/strings.xml6
-rw-r--r--service/res/values-pt-rPT/strings.xml6
-rw-r--r--service/res/values-pt/strings.xml6
-rw-r--r--service/res/values-ro/strings.xml6
-rw-r--r--service/res/values-ru/strings.xml6
-rw-r--r--service/res/values-si/strings.xml6
-rw-r--r--service/res/values-sk/strings.xml6
-rw-r--r--service/res/values-sl/strings.xml6
-rw-r--r--service/res/values-sq/strings.xml6
-rw-r--r--service/res/values-sr/strings.xml24
-rw-r--r--service/res/values-sv/strings.xml6
-rw-r--r--service/res/values-sw/strings.xml6
-rw-r--r--service/res/values-ta/strings.xml6
-rw-r--r--service/res/values-te/strings.xml6
-rw-r--r--service/res/values-th/strings.xml6
-rw-r--r--service/res/values-tl/strings.xml6
-rw-r--r--service/res/values-tr/strings.xml6
-rw-r--r--service/res/values-uk/strings.xml6
-rw-r--r--service/res/values-ur/strings.xml6
-rw-r--r--service/res/values-uz/strings.xml6
-rw-r--r--service/res/values-vi/strings.xml6
-rw-r--r--service/res/values-zh-rCN/strings.xml6
-rw-r--r--service/res/values-zh-rHK/strings.xml6
-rw-r--r--service/res/values-zh-rTW/strings.xml6
-rw-r--r--service/res/values-zu/strings.xml6
-rw-r--r--service/res/values/config.xml16
-rw-r--r--service/res/values/overlayable.xml3
-rw-r--r--service/res/values/strings.xml6
-rw-r--r--tests/wifitests/src/com/android/server/wifi/BssidBlocklistMonitorTest.java284
-rw-r--r--tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java128
-rw-r--r--tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java15
-rw-r--r--tests/wifitests/src/com/android/server/wifi/EapFailureNotifierTest.java29
-rw-r--r--tests/wifitests/src/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreDataTest.java12
-rw-r--r--tests/wifitests/src/com/android/server/wifi/NetworkSuggestionNominatorTest.java1
-rw-r--r--tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java15
-rw-r--r--tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java54
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoManagerTest.java75
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java72
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java81
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java10
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java8
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiKeyStoreTest.java120
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java159
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java11
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java182
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java50
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java261
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java9
-rw-r--r--tests/wifitests/src/com/android/server/wifi/aware/TestUtils.java2
-rw-r--r--tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java2
-rw-r--r--tests/wifitests/src/com/android/server/wifi/aware/WifiAwareNativeApiTest.java2
-rw-r--r--tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java123
-rw-r--r--tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java43
-rw-r--r--tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java2
-rw-r--r--tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java196
-rw-r--r--tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java8
-rw-r--r--tests/wifitests/src/com/android/server/wifi/util/ScanResultUtilTest.java8
277 files changed, 4439 insertions, 1436 deletions
diff --git a/libs/WifiTrackerLib/res/values-af/strings.xml b/libs/WifiTrackerLib/res/values-af/strings.xml
index 128920576..1246b1074 100644
--- a/libs/WifiTrackerLib/res/values-af/strings.xml
+++ b/libs/WifiTrackerLib/res/values-af/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Beperkte verbinding"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Daar kan nie by private DNS-bediener ingegaan word nie"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Geen internet nie"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Lae gehalte"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Geen"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Verval"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Tik om aan te meld"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Voltooi tans aanmelding …"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Kon nie aanmelding voltooi nie. Tik om weer te probeer."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Aanmelding is voltooi. Koppel tans …"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Hierdie netwerk ontvang \'n unieke ID wat gebruik kan word om toestelligging na te spoor. "<annotation id="url">"Kom meer te wete"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Hierdie netwerk ontvang \'n SIM-ID wat gebruik kan word om toestelligging na te spoor. "<annotation id="url">"Kom meer te wete"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Baie stadig"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Stadig"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-am/strings.xml b/libs/WifiTrackerLib/res/values-am/strings.xml
index cf57ddcae..78c66a2da 100644
--- a/libs/WifiTrackerLib/res/values-am/strings.xml
+++ b/libs/WifiTrackerLib/res/values-am/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"የተገደበ ግንኙነት"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"የግል ዲኤንኤስ አገልጋይ ሊደረስበት አይችልም"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"ምንም በይነመረብ የለም"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"አነስተኛ ጥራት"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"የለም"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"ጊዜው አልፏል"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"ለመመዝገብ መታ ያድርጉ"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"መመዝገብን በማጠናቀቅ ላይ…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"ምዝገባን ማጠናቀቅ አልተቻለም። እንደገና ለመሞከር መታ ያድርጉ።"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"ምዝገባ ተጠናቋል። በማገናኘት ላይ…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"ይህ አውታረ መረብ የመሣሪያ አካባቢን ለመከታተል ስራ ላይ ሊውል የሚችል ልዩ መታወቂያ ተቀብሏል። "<annotation id="url">"የበለጠ ለመረዳት"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"ይህ አውታረ መረብ የመሣሪያ አካባቢን ለመከታተል ሥራ ላይ ሊውል የሚችል የሲም መታወቂያ ይቀበላል። "<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>
diff --git a/libs/WifiTrackerLib/res/values-ar/strings.xml b/libs/WifiTrackerLib/res/values-ar/strings.xml
index ef0f10748..40ac14995 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>
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"اتصال محدود"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"لا يمكن الوصول إلى خادم أسماء نظام نطاقات خاص"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"لا يتوفر اتصال إنترنت."</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"جودة منخفضة"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"بلا أمان"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"منتهية الصلاحية"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"انقر للاشتراك."</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"جارٍ إكمال الاشتراك…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"تعذّر إكمال الاشتراك. انقر لإعادة المحاولة."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"اكتمل الاشتراك. جارٍ الاتصال…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"تتلقّى هذه الشبكة معرّفًا فريدًا يمكن استخدامه لتتبُّع الموقع الجغرافي للجهاز. "<annotation id="url">"مزيد من المعلومات"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"‏تتلقّى هذه الشبكة رقم تعريف لشريحة SIM يمكن استخدامه لتتبُّع الموقع الجغرافي للجهاز. "<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>
diff --git a/libs/WifiTrackerLib/res/values-as/strings.xml b/libs/WifiTrackerLib/res/values-as/strings.xml
index a211b32dd..a9a17b3fe 100644
--- a/libs/WifiTrackerLib/res/values-as/strings.xml
+++ b/libs/WifiTrackerLib/res/values-as/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"নিম্ন মানৰ"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"নাই"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"ম্যাদ উকলিছে"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"ছাইন আপ কৰিবলৈ টিপক"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"ছাইন আপ সম্পূৰ্ণ কৰি থকা হৈছে…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"ছাইন আপ সম্পূৰ্ণ কৰিব পৰা নগ’ল। পুনৰ চেষ্টা কৰিবলৈ টিপক।"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"ছাইন আপ সম্পূৰ্ণ হৈছে। সংযোগ কৰি থকা হৈছে…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"এই নেটৱৰ্কটোৱে এটা সুকীয়া আইডি পায়, যিটো ডিভাইচৰ অৱস্থান ট্ৰেক কৰিবলৈ ব্যৱহাৰ কৰিব পাৰি। "<annotation id="url">"অধিক জানক"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"এই নেটৱৰ্কটোৱে এটা ছিম আইডি পায়, যিটো ডিভাইচৰ অৱস্থান ট্ৰেক কৰিবলৈ ব্যৱহাৰ কৰিব পাৰি। "<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>
diff --git a/libs/WifiTrackerLib/res/values-az/strings.xml b/libs/WifiTrackerLib/res/values-az/strings.xml
index 5bc7a709e..8752985ed 100644
--- a/libs/WifiTrackerLib/res/values-az/strings.xml
+++ b/libs/WifiTrackerLib/res/values-az/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Məhdud bağlantı"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Özəl DNS serverinə giriş mümkün deyil"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"İnternet yoxdur"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Aşağı keyfiyyət"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Heç biri"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Vaxtı keçib"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Qeydiyyatdan keçmək üçün toxunun"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Qeydiyyat tamamlanır…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Qeydiyyat tamamlanmadı. Yenidən cəhd etmək üçün toxunun."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Qeydiyyat tamamlandı. Qoşulur…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Bu şəbəkə cihaz məkanını izləmək üçün istifadə edilə biləcək unikal ID qəbul edir. "<annotation id="url">"Ətraflı məlumat"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Bu şəbəkə cihaz məkanını izləmək üçün istifadə edilə biləcək SIM ID qəbul edir. "<annotation id="url">"Ətraflı məlumat"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Çox Yavaş"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Yavaş"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-b+sr+Latn/strings.xml b/libs/WifiTrackerLib/res/values-b+sr+Latn/strings.xml
index ebc3a7bc1..4a36f1b27 100644
--- a/libs/WifiTrackerLib/res/values-b+sr+Latn/strings.xml
+++ b/libs/WifiTrackerLib/res/values-b+sr+Latn/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Ograničena veza"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Pristup privatnom DNS serveru nije uspeo"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Nema interneta"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Loš kvalitet"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ništa"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Isteklo"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Dodirnite da biste se registrovali"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Registracija se dovršava…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Dovršavanje registracije nije uspelo. Dodirnite da biste probali ponovo."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registracija je dovršena. Povezuje se…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ova mreža zahteva jedinstveni ID koji može da se koristi za praćenje lokacije uređaja. "<annotation id="url">"Saznajte više"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ova mreža dobija ID SIM kartice koji može da se koristi za praćenje lokacije uređaja. "<annotation id="url">"Saznajte više"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Veoma spora"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Spora"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Potvrdi"</string>
diff --git a/libs/WifiTrackerLib/res/values-be/strings.xml b/libs/WifiTrackerLib/res/values-be/strings.xml
index de0459999..e8f0f7cea 100644
--- a/libs/WifiTrackerLib/res/values-be/strings.xml
+++ b/libs/WifiTrackerLib/res/values-be/strings.xml
@@ -28,7 +28,7 @@
<string name="wifi_ap_unable_to_handle_new_sta" msgid="6552198761671428871">"Пункт доступу часова заняты"</string>
<string name="wifi_disconnected" msgid="3720926757662831062">"Адключана"</string>
<string name="wifi_remembered" msgid="5126903736498678708">"Захавана"</string>
- <string name="wifi_metered_label" msgid="1362621600006544014">"Сетка з улікам трафіка"</string>
+ <string name="wifi_metered_label" msgid="1362621600006544014">"Сетка з падлікам трафіка"</string>
<string name="wifi_unmetered_label" msgid="499466875639448350">"Сетка без уліку трафіка"</string>
<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>
@@ -36,7 +36,8 @@
<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>
+ <string name="wifi_connected_no_internet" msgid="7273909077465731259">"Няма падключэння да інтэрнэту"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Нізкая якасць"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Няма"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Тэрмін скончыўся"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Націсніце, каб зарэгістравацца"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Рэгістрацыя завяршаецца…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Не ўдалося выканаць рэгістрацыю. Дакраніцеся, каб паўтарыць спробу."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Рэгістрацыя завершана. Ідзе падключэнне…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Гэта сетка атрымлівае ўнікальны ідэнтыфікатар, які можа выкарыстоўвацца для адсочвання месцазнаходжання прылады. "<annotation id="url">"Даведацца больш"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Гэта сетка атрымлівае ідэнтыфікатар SIM-карты, які можа выкарыстоўвацца для адсочвання месцазнаходжання прылады. "<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>
diff --git a/libs/WifiTrackerLib/res/values-bg/strings.xml b/libs/WifiTrackerLib/res/values-bg/strings.xml
index f17e36a2c..83230d881 100644
--- a/libs/WifiTrackerLib/res/values-bg/strings.xml
+++ b/libs/WifiTrackerLib/res/values-bg/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Ниско качество"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Няма"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Изтекло"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Докоснете, за да се регистрирате"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Регистрацията се завършва…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Регистрацията не можа да бъде завършена. Докоснете, за да опитате отново."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Регистрацията е завършена. Установява се връзка…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Тази мрежа получава уникален идентификатор, който може да се използва за проследяване на местоположението на устройството. "<annotation id="url">"Научете повече"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Тази мрежа получава идентификатор за SIM карта, който може да се използва за проследяване на местоположението на устройството. "<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">"ОK"</string>
diff --git a/libs/WifiTrackerLib/res/values-bn/strings.xml b/libs/WifiTrackerLib/res/values-bn/strings.xml
index 8b3bdc270..0528cb756 100644
--- a/libs/WifiTrackerLib/res/values-bn/strings.xml
+++ b/libs/WifiTrackerLib/res/values-bn/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"সীমিত কানেকশন"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"ব্যক্তিগত ডিএনএস সার্ভার অ্যাক্সেস করা যাবে না"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"ইন্টারনেট কানেকশন নেই"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"খারাপ কোয়ালিটি"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"কোনও কিছুই নয়"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"মেয়াদ শেষ হয়ে গেছে"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"সাইন-আপ করতে ট্যাপ করুন"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"সাইন-আপ করা হচ্ছে…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"সাইন-আপ করা যায়নি। আবার চেষ্টা করতে ট্যাপ করুন।"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"সাইন-আপ করা হয়ে গেছে। কানেক্ট করা হচ্ছে…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"এই নেটওয়ার্কে একটি অনন্য আইডি পাবেন যার সাহায্যে এই নেটওয়ার্কের সাথে যুক্ত থাকা ডিভাইসের লোকেশন ট্র্যাক করা যাবে। "<annotation id="url">"আরও জানুন"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"এই নেটওয়ার্কের কাছে একটি সিম আইডি থাকে যা ব্যবহার করে ডিভাইসের লোকেশন ট্র্যাক করা যাবে। "<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>
diff --git a/libs/WifiTrackerLib/res/values-bs/arrays.xml b/libs/WifiTrackerLib/res/values-bs/arrays.xml
index 727f5d75a..9428a3763 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">"Suspendirano"</item>
+ <item msgid="1598801023719359130">"Obustavljeno"</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-bs/strings.xml b/libs/WifiTrackerLib/res/values-bs/strings.xml
index 92a747cb6..148c02050 100644
--- a/libs/WifiTrackerLib/res/values-bs/strings.xml
+++ b/libs/WifiTrackerLib/res/values-bs/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Ograničena veza"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Nije moguće pristupiti privatnom DNS serveru"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Nema internetske veze"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Nizak kvalitet"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ništa"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Isteklo"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Dodirnite za registraciju"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Završavanje registracije…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Registraciju nije moguće izvršiti. Dodirnite da pokušate ponovo."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registracija je završena. Povezivanje…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ova mreža prima jedinstveni ID koji se može koristiti za praćenje lokacije uređaja. "<annotation id="url">"Saznajte više"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ova mreža prima ID SIM-a koji se može koristiti za praćenje lokacije uređaja. "<annotation id="url">"Saznajte više"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Veoma sporo"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Sporo"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Uredu"</string>
diff --git a/libs/WifiTrackerLib/res/values-ca/strings.xml b/libs/WifiTrackerLib/res/values-ca/strings.xml
index 4711bd4da..a07ee2e4a 100644
--- a/libs/WifiTrackerLib/res/values-ca/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ca/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Connexió limitada"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"No es pot accedir al servidor DNS privat"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Sense connexió a Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Qualitat baixa"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Cap"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Caducada"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Toca per registrar-te"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"S\'està completant el registre…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"No s\'ha pogut completar el registre. Toca per tornar-ho a provar."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"S\'ha completat el registre. S\'està connectant…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Aquesta xarxa rep un identificador únic que es pot utilitzar per fer el seguiment de la ubicació del dispositiu. "<annotation id="url">"Més informació"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Aquesta xarxa rep un identificador de SIM que es pot utilitzar per fer el seguiment de la ubicació del dispositiu. "<annotation id="url">"Més informació"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Molt lenta"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lenta"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Correcta"</string>
diff --git a/libs/WifiTrackerLib/res/values-cs/strings.xml b/libs/WifiTrackerLib/res/values-cs/strings.xml
index 69d90f52c..6562a2873 100644
--- a/libs/WifiTrackerLib/res/values-cs/strings.xml
+++ b/libs/WifiTrackerLib/res/values-cs/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Omezené připojení"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Nelze získat přístup k soukromému serveru DNS"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Nejste připojeni k internetu"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Nízká kvalita"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Žádné"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Platnost vypršela"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Klepnutím se zaregistrujete"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Dokončování registrace…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Registraci se nepodařilo dokončit. Klepnutím opakujte akci."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registrace byla dokončena. Připojování…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Tato síť dostane jedinečný identifikátor, pomocí kterého lze sledovat polohu zařízení. "<annotation id="url">"Další informace"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Tato síť dostane identifikátor SIM karty, pomocí kterého lze sledovat polohu zařízení. "<annotation id="url">"Další informace"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Velmi pomalá"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Pomalá"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-da/strings.xml b/libs/WifiTrackerLib/res/values-da/strings.xml
index ff21ffb69..d8a2cb96f 100644
--- a/libs/WifiTrackerLib/res/values-da/strings.xml
+++ b/libs/WifiTrackerLib/res/values-da/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Begrænset forbindelse"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Der er ikke adgang til den private DNS-server"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Intet internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Dårlig kvalitet"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ingen"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Udløbet"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Tryk for at registrere"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Fuldfører registrering…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Registreringen kunne ikke fuldføres. Tryk for at prøve igen."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registreringen er fuldført. Opretter forbindelse…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Dette netværk kræver et unikt id, der kan bruges til at spore enhedens placering. "<annotation id="url">"Få flere oplysninger"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Dette netværk kræver et SIM-id, der kan bruges til at spore enhedens placering. "<annotation id="url">"Få flere oplysninger"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Meget langsom"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Langsom"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-de/strings.xml b/libs/WifiTrackerLib/res/values-de/strings.xml
index 900707387..c6a554e48 100644
--- a/libs/WifiTrackerLib/res/values-de/strings.xml
+++ b/libs/WifiTrackerLib/res/values-de/strings.xml
@@ -29,7 +29,7 @@
<string name="wifi_disconnected" msgid="3720926757662831062">"Nicht verbunden"</string>
<string name="wifi_remembered" msgid="5126903736498678708">"Gespeichert"</string>
<string name="wifi_metered_label" msgid="1362621600006544014">"Kostenpflichtig"</string>
- <string name="wifi_unmetered_label" msgid="499466875639448350">"Kostenlos"</string>
+ <string name="wifi_unmetered_label" msgid="499466875639448350">"Ohne Datenlimit"</string>
<string name="connected_via_app" msgid="1818040967936972127">"Verbunden über <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_app" msgid="9110324040292242769">"Über <xliff:g id="NAME">%1$s</xliff:g> verfügbar"</string>
<string name="connected_via_network_scorer" msgid="209764314005159012">"Automatisch verbunden über <xliff:g id="NAME">%1$s</xliff:g>"</string>
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Eingeschränkte Verbindung"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Auf den privaten DNS-Server kann nicht zugegriffen werden"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Kein Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Niedrige Qualität"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Keine"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Abgelaufen"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Zum Registrieren tippen"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Registrierung wird abgeschlossen…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Registrierung konnte nicht abgeschlossen werden. Tippe, um es noch einmal zu versuchen."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registrierung abgeschlossen. Verbindung wird hergestellt…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Dieses Netzwerk empfängt eine eindeutige ID, mit der der Gerätestandort erfasst werden kann. "<annotation id="url">"Weitere Informationen"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Dieses Netzwerk empfängt eine SIM-ID, mit der der Gerätestandort erfasst werden kann. "<annotation id="url">"Weitere Informationen."</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Sehr langsam"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Langsam"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Ok"</string>
diff --git a/libs/WifiTrackerLib/res/values-el/strings.xml b/libs/WifiTrackerLib/res/values-el/strings.xml
index 31c065d8d..4ae7d7424 100644
--- a/libs/WifiTrackerLib/res/values-el/strings.xml
+++ b/libs/WifiTrackerLib/res/values-el/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Χαμηλή ποιότητα"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Καμία"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Έληξε"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Πατήστε για εγγραφή"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Ολοκλήρωση εγγραφής…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Δεν ήταν δυνατή η ολοκλήρωση της εγγραφής. Πατήστε για να δοκιμάσετε ξανά."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Η εγγραφή ολοκληρώθηκε. Σύνδεση…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Αυτό το δίκτυο λαμβάνει ένα μοναδικό αναγνωριστικό το οποίο μπορεί να χρησιμοποιηθεί για τον εντοπισμό της τοποθεσίας της συσκευής. "<annotation id="url">"Μάθετε περισσότερα"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Αυτό το δίκτυο λαμβάνει ένα αναγνωριστικό SIM το οποίο μπορεί να χρησιμοποιηθεί για τον εντοπισμό της τοποθεσίας της συσκευής. "<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>
diff --git a/libs/WifiTrackerLib/res/values-en-rAU/strings.xml b/libs/WifiTrackerLib/res/values-en-rAU/strings.xml
index 2f8fc1527..70d1a9cf6 100644
--- a/libs/WifiTrackerLib/res/values-en-rAU/strings.xml
+++ b/libs/WifiTrackerLib/res/values-en-rAU/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Limited connection"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Private DNS server cannot be accessed"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"No Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Low quality"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"None"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Expired"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Tap to sign up"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Completing sign-up…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Couldn’t complete sign-up. Tap to try again."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Sign-up complete. Connecting…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"This network receives a unique ID that can be used to track device location. "<annotation id="url">"Learn more"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"This network receives a SIM ID that can be used to track device location. "<annotation id="url">"Learn more"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Very slow"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Slow"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-en-rCA/strings.xml b/libs/WifiTrackerLib/res/values-en-rCA/strings.xml
index 2f8fc1527..70d1a9cf6 100644
--- a/libs/WifiTrackerLib/res/values-en-rCA/strings.xml
+++ b/libs/WifiTrackerLib/res/values-en-rCA/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Limited connection"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Private DNS server cannot be accessed"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"No Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Low quality"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"None"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Expired"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Tap to sign up"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Completing sign-up…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Couldn’t complete sign-up. Tap to try again."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Sign-up complete. Connecting…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"This network receives a unique ID that can be used to track device location. "<annotation id="url">"Learn more"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"This network receives a SIM ID that can be used to track device location. "<annotation id="url">"Learn more"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Very slow"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Slow"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-en-rGB/strings.xml b/libs/WifiTrackerLib/res/values-en-rGB/strings.xml
index 2f8fc1527..70d1a9cf6 100644
--- a/libs/WifiTrackerLib/res/values-en-rGB/strings.xml
+++ b/libs/WifiTrackerLib/res/values-en-rGB/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Limited connection"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Private DNS server cannot be accessed"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"No Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Low quality"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"None"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Expired"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Tap to sign up"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Completing sign-up…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Couldn’t complete sign-up. Tap to try again."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Sign-up complete. Connecting…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"This network receives a unique ID that can be used to track device location. "<annotation id="url">"Learn more"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"This network receives a SIM ID that can be used to track device location. "<annotation id="url">"Learn more"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Very slow"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Slow"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-en-rIN/strings.xml b/libs/WifiTrackerLib/res/values-en-rIN/strings.xml
index 2f8fc1527..70d1a9cf6 100644
--- a/libs/WifiTrackerLib/res/values-en-rIN/strings.xml
+++ b/libs/WifiTrackerLib/res/values-en-rIN/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Limited connection"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Private DNS server cannot be accessed"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"No Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Low quality"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"None"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Expired"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Tap to sign up"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Completing sign-up…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Couldn’t complete sign-up. Tap to try again."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Sign-up complete. Connecting…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"This network receives a unique ID that can be used to track device location. "<annotation id="url">"Learn more"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"This network receives a SIM ID that can be used to track device location. "<annotation id="url">"Learn more"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Very slow"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Slow"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-en-rXC/strings.xml b/libs/WifiTrackerLib/res/values-en-rXC/strings.xml
index 087ad386b..2a7fadcdb 100644
--- a/libs/WifiTrackerLib/res/values-en-rXC/strings.xml
+++ b/libs/WifiTrackerLib/res/values-en-rXC/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎Limited connection‎‏‎‎‏‎"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‏‎‏‏‎‎‎‎Private DNS server cannot be accessed‎‏‎‎‏‎"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎No internet‎‏‎‎‏‎"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎Low quality‎‏‎‎‏‎"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎None‎‏‎‎‏‎"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎Expired‎‏‎‎‏‎"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎Tap to sign up‎‏‎‎‏‎"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎Completing sign-up…‎‏‎‎‏‎"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‏‏‎Couldn’t complete sign-up. Tap to try again.‎‏‎‎‏‎"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‎Sign-up complete. Connecting…‎‏‎‎‏‎"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎This network receives a unique ID that can be used to track device location. ‎‏‎‎‏‏‎"<annotation id="url">"‎‏‎‎‏‏‏‎Learn more‎‏‎‎‏‏‎"</annotation>"‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎This network receives a SIM ID that can be used to track device location. ‎‏‎‎‏‏‎"<annotation id="url">"‎‏‎‎‏‏‏‎Learn more‎‏‎‎‏‏‎"</annotation>"‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎Very Slow‎‏‎‎‏‎"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎Slow‎‏‎‎‏‎"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎OK‎‏‎‎‏‎"</string>
diff --git a/libs/WifiTrackerLib/res/values-es-rUS/strings.xml b/libs/WifiTrackerLib/res/values-es-rUS/strings.xml
index c0ac95b28..65a769775 100644
--- a/libs/WifiTrackerLib/res/values-es-rUS/strings.xml
+++ b/libs/WifiTrackerLib/res/values-es-rUS/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Conexión limitada"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"No se puede acceder al servidor DNS privado"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Sin Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Baja calidad"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ninguna"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Vencida"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Presiona para registrarte"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Completando registro…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"No se pudo completar el registro. Presiona para volver a intentarlo."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Se completó el registro. Conectando…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Esta red recibe un ID único que se puede usar para realizar el seguimiento de la ubicación del dispositivo. "<annotation id="url">"Más información"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Esta red recibe un ID de SIM que se puede usar para realizar el seguimiento de la ubicación del dispositivo. "<annotation id="url">"Más información"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Muy lenta"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lenta"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Aceptar"</string>
diff --git a/libs/WifiTrackerLib/res/values-es/strings.xml b/libs/WifiTrackerLib/res/values-es/strings.xml
index 6c6990e3d..a9435e3ff 100644
--- a/libs/WifiTrackerLib/res/values-es/strings.xml
+++ b/libs/WifiTrackerLib/res/values-es/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Conexión limitada"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"No se ha podido acceder al servidor DNS privado"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Sin Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Calidad baja"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ninguna"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Caducada"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Toca para registrarte"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Completando registro…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"No se ha podido completar el registro. Toca para volver a intentarlo."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Se ha completado el registro. Conectando…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Esta red recibe un ID único con el que se puede rastrear la ubicación del dispositivo "<annotation id="url">"Más información"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Esta red recibe un ID de SIM con el que se puede rastrear la ubicación del dispositivo. "<annotation id="url">"Más información"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Muy lenta"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lenta"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Aceptable"</string>
diff --git a/libs/WifiTrackerLib/res/values-et/strings.xml b/libs/WifiTrackerLib/res/values-et/strings.xml
index 6843d21b1..aa919290d 100644
--- a/libs/WifiTrackerLib/res/values-et/strings.xml
+++ b/libs/WifiTrackerLib/res/values-et/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Piiratud ühendus"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Privaatsele DNS-serverile ei pääse juurde"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Interneti pole"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Kehva kvaliteediga"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Puudub"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Aegunud"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Puudutage registreerimiseks"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Registreerimise lõpuleviimine …"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Registreerimist ei saanud lõpule viia. Puudutage, et uuesti proovida."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registreerimine on lõpule viidud. Ühendamine …"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"See võrk saab kordumatu ID, mida saab kasutada seadme asukoha jälgimiseks. "<annotation id="url">"Lisateave"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"See võrk saab SIM-i ID, mida saab kasutada seadme asukoha jälgimiseks. "<annotation id="url">"Lisateave"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Väga aeglane"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Aeglane"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Hea"</string>
diff --git a/libs/WifiTrackerLib/res/values-eu/strings.xml b/libs/WifiTrackerLib/res/values-eu/strings.xml
index a4400073c..da6fa13e4 100644
--- a/libs/WifiTrackerLib/res/values-eu/strings.xml
+++ b/libs/WifiTrackerLib/res/values-eu/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Konexio mugatua"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Ezin da atzitu DNS zerbitzari pribatua"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Ez dago Interneteko konexiorik"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Kalitate txikia"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Bat ere ez"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Iraungita"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Sakatu izena emateko"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Izena ematen…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Ezin izan da eman izena. Berriro saiatzeko, ukitu hau."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Eman da izena. Konektatzen…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Gailuaren kokapenaren jarraipena egiteko balio duen ID esklusibo bat jasotzen du sare honek. "<annotation id="url">"Lortu informazio gehiago"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Gailuaren kokapenaren jarraipena egiteko balio duen SIM ID esklusibo bat jasotzen du sare honek. "<annotation id="url">"Lortu informazio gehiago"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Oso motela"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Motela"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Ados"</string>
diff --git a/libs/WifiTrackerLib/res/values-fa/arrays.xml b/libs/WifiTrackerLib/res/values-fa/arrays.xml
index af40e8f4c..51ef4b84b 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 70f79b695..ec535eb65 100644
--- a/libs/WifiTrackerLib/res/values-fa/strings.xml
+++ b/libs/WifiTrackerLib/res/values-fa/strings.xml
@@ -20,8 +20,8 @@
<string name="auto_connect_disable" msgid="1078319396240632542">"اتصال خودکار خاموش است"</string>
<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_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_generic" msgid="8307050327779256414">"غیرفعال شد"</string>
@@ -33,10 +33,11 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"کیفیت پایین"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"خالی"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"منقضی‌شده"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"برای ثبت‌نام ضربه بزنید"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"درحال تکمیل ثبت‌نام…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"ثبت‌نام تکمیل نشد. برای امتحان مجدد ضربه بزنید."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"ثبت‌نام کامل شد. درحال اتصال…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"این شبکه شناسه یکتایی را دریافت می‌کند که می‌توان از آن برای ردیابی مکان دستگاه استفاده کرد. "<annotation id="url">"بیشتر بدانید"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"این شبکه شناسه سیم‌کارتی را دریافت می‌کند که می‌توان از آن برای ردیابی مکان دستگاه استفاده کرد. "<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>
diff --git a/libs/WifiTrackerLib/res/values-fi/strings.xml b/libs/WifiTrackerLib/res/values-fi/strings.xml
index 43c1eea36..e8c7b7249 100644
--- a/libs/WifiTrackerLib/res/values-fi/strings.xml
+++ b/libs/WifiTrackerLib/res/values-fi/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Rajallinen yhteys"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Ei pääsyä yksityiselle DNS-palvelimelle"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Ei internetyhteyttä"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Heikko laatu"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ei mitään"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Vanhentunut"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Rekisteröidy napauttamalla"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Viimeistellään rekisteröitymistä…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Rekisteröityminen ei onnistunut. Yritä uudelleen napauttamalla."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Rekisteröityminen valmis. Yhdistetään…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Tälle verkolle lähetetään yksilöllinen tunnus, jolla voidaan seurata laitteen sijaintia. "<annotation id="url">"Lue lisää"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Tälle verkolle luodaan SIM-tunnus, jolla voidaan seurata laitteen sijaintia. "<annotation id="url">"Lue lisää"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Hyvin hidas"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Hidas"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-fr-rCA/strings.xml b/libs/WifiTrackerLib/res/values-fr-rCA/strings.xml
index 15cbde518..abc03f440 100644
--- a/libs/WifiTrackerLib/res/values-fr-rCA/strings.xml
+++ b/libs/WifiTrackerLib/res/values-fr-rCA/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Connexion limitée"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Impossible d\'accéder au serveur DNS privé"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Aucune connexion Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Faible qualité"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Aucune"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Expiré"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Toucher pour vous inscrire"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Finalisation de l\'inscription en cours…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Impossible de terminer l\'inscription. Touchez pour réessayer."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Inscription terminée. Connexion en cours…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ce réseau reçoit un identifiant unique qui peut être utilisé pour faire le suivi de la position de l\'appareil. "<annotation id="url">"En savoir plus"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ce réseau reçoit un identifiant SIM qui peut être utilisé pour faire le suivi de la position de l\'appareil. "<annotation id="url">"En savoir plus"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Très lente"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lente"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-fr/strings.xml b/libs/WifiTrackerLib/res/values-fr/strings.xml
index f917d8f31..3a6e68e16 100644
--- a/libs/WifiTrackerLib/res/values-fr/strings.xml
+++ b/libs/WifiTrackerLib/res/values-fr/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Connexion limitée"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Impossible d\'accéder au serveur DNS privé"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Aucun accès à Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Faible qualité"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Aucune"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Arrivé à expiration"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Appuyez ici pour vous connecter"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Finalisation de l\'inscription…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Impossible de finaliser l\'inscription. Appuyez ici pour réessayer."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Inscription terminée. Connexion…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ce réseau reçoit un identifiant unique qui peut être utilisé pour suivre la position de l\'appareil. "<annotation id="url">"En savoir plus"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ce réseau reçoit un ID de carte SIM qui peut être utilisé pour suivre la position de l\'appareil. "<annotation id="url">"En savoir plus"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Très lente"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lente"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Correcte"</string>
diff --git a/libs/WifiTrackerLib/res/values-gl/strings.xml b/libs/WifiTrackerLib/res/values-gl/strings.xml
index d4a8c0eb9..c0788f9bb 100644
--- a/libs/WifiTrackerLib/res/values-gl/strings.xml
+++ b/libs/WifiTrackerLib/res/values-gl/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Pouca conexión"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Non se puido acceder ao servidor DNS privado"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Non hai conexión a Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Pouca calidade"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ningunha"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Caducou"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Toca para rexistrarte"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Completando rexistro…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Non se puido completar o rexistro. Toca para tentalo de novo."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Completouse o rexistro. Conectando…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Esta rede recibe un código exclusivo que se pode utilizar para realizar un seguimento da localización dos dispositivos. "<annotation id="url">"Máis información"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Esta rede recibe un código SIM que se pode utilizar para realizar un seguimento da localización do dispositivo. "<annotation id="url">"Máis información"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Moi lenta"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lenta"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Aceptar"</string>
diff --git a/libs/WifiTrackerLib/res/values-gu/strings.xml b/libs/WifiTrackerLib/res/values-gu/strings.xml
index e387dd397..91ab28936 100644
--- a/libs/WifiTrackerLib/res/values-gu/strings.xml
+++ b/libs/WifiTrackerLib/res/values-gu/strings.xml
@@ -33,10 +33,11 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"ઓછી ક્વૉલિટી"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"કોઈ નહીં"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"સમય સમાપ્ત થયો"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"સાઇન અપ કરવા માટે ટૅપ કરો"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"સાઇન અપ પૂર્ણ કરી રહ્યા છીએ…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"સાઇન અપ પૂર્ણ કરી શકાયું નથી. ફરી પ્રયાસ કરવા માટે ટૅપ કરો."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"સાઇન અપ પૂર્ણ. કનેક્ટ કરી રહ્યાં છીએ…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"આ નેટવર્ક એક વિશેષ ID મેળવે છે જેનો ઉપયોગ ડિવાઇસનું સ્થાન ટ્રૅક કરવા માટે થઈ શકે છે. "<annotation id="url">"વધુ જાણો"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"આ નેટવર્કને સિમ 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>
diff --git a/libs/WifiTrackerLib/res/values-hi/strings.xml b/libs/WifiTrackerLib/res/values-hi/strings.xml
index 53d55e761..8cb064976 100644
--- a/libs/WifiTrackerLib/res/values-hi/strings.xml
+++ b/libs/WifiTrackerLib/res/values-hi/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"सीमित कनेक्शन"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"निजी डीएनएस सर्वर को ऐक्सेस नहीं किया जा सकता"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"इंटरनेट कनेक्शन नहीं है"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"खराब कनेक्शन"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"कोई नहीं"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"समयसीमा खत्म हो गई"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"साइन अप करने के लिए टैप करें"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"साइन अप किया जा रहा है…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"साइन अप नहीं हो सका. फिर से कोशिश करने के लिए टैप करें."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"साइन अप की प्रक्रिया पूरी हो गई. कनेक्ट हो रहा है…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"इस नेटवर्क को एक विशेष आईडी दिया जाता है जिसका इस्तेमाल डिवाइस की जगह की जानकारी का पता लगाने के लिए किया जा सकता है. "<annotation id="url">"ज़्यादा जानें"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"इस नेटवर्क को एक सिम आईडी दिया जाता है जिसका इस्तेमाल डिवाइस की जगह की जानकारी का पता लगाने के लिए किया जा सकता है. "<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>
diff --git a/libs/WifiTrackerLib/res/values-hr/strings.xml b/libs/WifiTrackerLib/res/values-hr/strings.xml
index 6ddae4fc4..6d1b01004 100644
--- a/libs/WifiTrackerLib/res/values-hr/strings.xml
+++ b/libs/WifiTrackerLib/res/values-hr/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Ograničena veza"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Nije moguće pristupiti privatnom DNS poslužitelju"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Nema interneta"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Niska kvaliteta"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Nema"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Isteklo"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Dodirnite da biste se registrirali"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Dovršavanje registracije…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Registracija nije dovršena. Dodirnite za ponovni pokušaj."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registracija je dovršena. Povezivanje…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ova mreža prima jedinstveni ID koji se može koristiti za praćenje lokacije uređaja. "<annotation id="url">"Saznajte više"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ova mreža prima jedinstveni ID SIM-a koji se može koristiti za praćenje lokacije uređaja. "<annotation id="url">"Saznajte više"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Vrlo sporo"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Sporo"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"U redu"</string>
diff --git a/libs/WifiTrackerLib/res/values-hu/strings.xml b/libs/WifiTrackerLib/res/values-hu/strings.xml
index 3f3afeff1..f8fd55460 100644
--- a/libs/WifiTrackerLib/res/values-hu/strings.xml
+++ b/libs/WifiTrackerLib/res/values-hu/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Korlátozott kapcsolat"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"A privát DNS-kiszolgálóhoz nem lehet hozzáférni"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Nincs internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Gyenge minőségű"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Nincs"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Lejárt"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Koppintson a regisztrációhoz"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Regisztráció befejezése…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Nem sikerült a regisztráció befejezése. Koppintással újrapróbálkozhat."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"A regisztráció befejeződött. Csatlakozás…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ez a hálózat egyedi azonosítót kap, amely felhasználható az eszköz helyadatainak követésére. "<annotation id="url">"További információ"</annotation>"."</string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ez a hálózat SIM-azonosítót kap, amely felhasználható az eszköz helyadatainak követésére. "<annotation id="url">"További információ"</annotation>"."</string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Nagyon lassú"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lassú"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Rendben"</string>
diff --git a/libs/WifiTrackerLib/res/values-hy/strings.xml b/libs/WifiTrackerLib/res/values-hy/strings.xml
index 0d3def261..c6125f9c9 100644
--- a/libs/WifiTrackerLib/res/values-hy/strings.xml
+++ b/libs/WifiTrackerLib/res/values-hy/strings.xml
@@ -33,10 +33,11 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Ցածր որակ"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ոչ մեկը"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Սպառվել է"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Հպեք՝ գրանցվելու համար"</string>
@@ -46,10 +47,10 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Գրանցումն ավարտվում է…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Չհաջողվեց ավարտել գրանցումը։ Հպեք՝ նորից փորձելու համար։"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Գրանցումն ավարտված է։ Միացում…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Այս ցանցը ստանում է եզակի ID, որի օգնությամբ հնարավոր է հետագծել սարքի տեղադրությունը։ "<annotation id="url">"Իմանալ ավելին"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Այս ցանցը ստանում է եզակի 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-in/strings.xml b/libs/WifiTrackerLib/res/values-in/strings.xml
index adb4a720b..f1b067aaa 100644
--- a/libs/WifiTrackerLib/res/values-in/strings.xml
+++ b/libs/WifiTrackerLib/res/values-in/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Koneksi terbatas"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Server DNS pribadi tidak dapat diakses"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Tidak ada internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Kualitas rendah"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Tidak ada"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Sudah tidak berlaku"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Ketuk untuk mendaftar"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Menyelesaikan pendaftaran…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Tidak dapat menyelesaikan pendaftaran. Ketuk untuk mencoba lagi."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Pendaftaran selesai. Menyambungkan…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Jaringan ini menerima ID unik yang dapat digunakan untuk melacak lokasi perangkat. "<annotation id="url">"Pelajari lebih lanjut"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Jaringan ini menerima ID SIM yang dapat digunakan untuk melacak lokasi perangkat. "<annotation id="url">"Pelajari lebih lanjut"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Sangat Lambat"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lambat"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Oke"</string>
diff --git a/libs/WifiTrackerLib/res/values-is/strings.xml b/libs/WifiTrackerLib/res/values-is/strings.xml
index b937486b6..5e7dbdfb7 100644
--- a/libs/WifiTrackerLib/res/values-is/strings.xml
+++ b/libs/WifiTrackerLib/res/values-is/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Takmörkuð tenging"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Ekki næst í DNS-einkaþjón"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Engin nettenging"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Lítil gæði"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ekkert"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Útrunnin"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Ýttu til að skrá þig"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Gengur frá skráningu…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Ekki tókst að ljúka við skráningu. Ýttu til að reyna aftur."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Skráningu lokið. Tengist…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Þetta net fær einkvæmt auðkenni sem hægt er að nota til að rekja staðsetningu tækis. "<annotation id="url">"Frekari upplýsingar"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Þetta net fær SIM-auðkenni sem hægt er að nota til að rekja staðsetningu tækisins. "<annotation id="url">"Frekari upplýsingar"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Mjög hægt"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Hægt"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Í lagi"</string>
diff --git a/libs/WifiTrackerLib/res/values-it/strings.xml b/libs/WifiTrackerLib/res/values-it/strings.xml
index 20c113d0b..3b9c1e120 100644
--- a/libs/WifiTrackerLib/res/values-it/strings.xml
+++ b/libs/WifiTrackerLib/res/values-it/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Connessione limitata"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Non è possibile accedere al server DNS privato"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Internet assente"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Bassa qualità"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Nessuna"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Scaduta"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Tocca per registrarti"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Completamento della registrazione…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Impossibile completare la registrazione. Tocca per riprovare."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registrazione completata. Connessione…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Questa rete riceve un ID univoco che può essere usato per monitorare la posizione del dispositivo. "<annotation id="url">"Ulteriori informazioni"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Questa rete riceve un ID SIM che può essere usato per monitorare la posizione del dispositivo. "<annotation id="url">"Ulteriori informazioni"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Molto lenta"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lenta"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-iw/strings.xml b/libs/WifiTrackerLib/res/values-iw/strings.xml
index 3c4337739..2cb644857 100644
--- a/libs/WifiTrackerLib/res/values-iw/strings.xml
+++ b/libs/WifiTrackerLib/res/values-iw/strings.xml
@@ -18,25 +18,26 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="summary_separator" msgid="6533720408587140819">" / "</string>
<string name="auto_connect_disable" msgid="1078319396240632542">"החיבור האוטומטי כבוי"</string>
- <string name="saved_network" msgid="6241977554502802914">"נשמר על ידי <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <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_check_password_try_again" msgid="2643230209986217827">"בדוק את הסיסמה ונסה שוב"</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>
+ <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>
- <string name="wifi_remembered" msgid="5126903736498678708">"נשמר"</string>
+ <string name="wifi_remembered" msgid="5126903736498678708">"נשמרה"</string>
<string name="wifi_metered_label" msgid="1362621600006544014">"נמדדת"</string>
<string name="wifi_unmetered_label" msgid="499466875639448350">"לא נמדדת"</string>
- <string name="connected_via_app" msgid="1818040967936972127">"מחוברת באמצעות <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <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="wifi_limited_connection" msgid="3646701342701276239">"חיבור מוגבל"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"‏לא ניתן לגשת לשרת DNS הפרטי"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"אין אינטרנט"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"איכות נמוכה"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"ללא"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"התוקף פג"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"יש להקיש כדי להירשם"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"מתבצעת השלמה של ההרשמה…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"לא ניתן היה להשלים את ההרשמה. יש להקיש כדי לנסות שוב."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"תהליך ההרשמה הסתיים. בתהליך התחברות…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"הרשת הזו מקבלת מזהה ייחודי שיכול לשמש למעקב אחר מיקום המכשיר. "<annotation id="url">"מידע נוסף"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"‏הרשת הזו מקבלת מזהה SIM שיכול לשמש למעקב אחר מיקום המכשיר. "<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>
diff --git a/libs/WifiTrackerLib/res/values-ja/strings.xml b/libs/WifiTrackerLib/res/values-ja/strings.xml
index bb7187b24..b6fc09e33 100644
--- a/libs/WifiTrackerLib/res/values-ja/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ja/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"低品質"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"なし"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"期限切れ"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"タップして登録してください"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"登録を完了しています…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"登録を完了できませんでした。タップしてもう一度お試しください。"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"登録が完了しました。接続しています…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"このネットワークは一意の ID を受信します。この ID を使ってデバイスの位置情報が追跡される可能性があります。"<annotation id="url">"詳細"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"このネットワークは SIM ID を受信します。この 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">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-ka/strings.xml b/libs/WifiTrackerLib/res/values-ka/strings.xml
index 56e883673..1c72c3c65 100644
--- a/libs/WifiTrackerLib/res/values-ka/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ka/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"დაბალი ხარისხი"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"არცერთი"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"ვადაგასულია"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"შეეხეთ რეგისტრაციისთვის"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"მიმდინარეობს რეგისტრაციის დასრულება…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"რეგისტრაციის დასრულება ვერ მოხერხდა. შეეხეთ ხელახლა საცდელად."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"რეგისტრაცია დასრულდა. მიმდინარეობს დაკავშირება…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"ეს ქსელი მიიღებს უნიკალურ ID-ს, რომლის მეშვეობითაც შესაძლებელია მოწყობილობის მდებარეობაზე თვალის დევნება. "<annotation id="url">"შეიტყვეთ მეტი"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"ეს ქსელი მიიღებს SIM-ის 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>
diff --git a/libs/WifiTrackerLib/res/values-kk/strings.xml b/libs/WifiTrackerLib/res/values-kk/strings.xml
index 591170d9e..ef5c850bf 100644
--- a/libs/WifiTrackerLib/res/values-kk/strings.xml
+++ b/libs/WifiTrackerLib/res/values-kk/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Төмен сапа"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ешқандай"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Мерзімі өтті"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Тіркелу үшін түртіңіз."</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Тіркелу аяқталуда…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Тіркелу аяқталмады. Әрекетті қайталау үшін түртіңіз."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Тіркелу аяқталды. Байланыс орнатылуда…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Бұл желіге бірегей идентификатор беріледі, оның көмегімен құрылғының орналасқан жері қадағаланады. "<annotation id="url">"Толығырақ"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Бұл желіге SIM идентификаторы беріледі, оның көмегімен құрылғының орналасқан жері қадағаланады. "<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>
diff --git a/libs/WifiTrackerLib/res/values-km/strings.xml b/libs/WifiTrackerLib/res/values-km/strings.xml
index 32150fa45..ca88fa58b 100644
--- a/libs/WifiTrackerLib/res/values-km/strings.xml
+++ b/libs/WifiTrackerLib/res/values-km/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"គុណភាព​ទាប"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"គ្មាន"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"បានផុតកំណត់"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"ចុច​ដើម្បី​ចុះឈ្មោះ"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"កំពុង​បញ្ចប់​ការចុះឈ្មោះ…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"មិនអាច​បញ្ចប់​ការចុះឈ្មោះ​បានទេ។ សូមចុច ដើម្បី​ព្យាយាម​ម្ដង​ទៀត។"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"ការចុះ​ឈ្មោះ​បានបញ្ចប់។ កំពុងភ្ជាប់…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"បណ្ដាញនេះទទួលលេខសម្គាល់ពិសេស ដែលអាចប្រើ​សម្រាប់​តាមដាន​ទីតាំងឧបករណ៍។ "<annotation id="url">"ស្វែងយល់បន្ថែម"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"បណ្ដាញនេះ​ទទួលបាន​លេខសម្គាល់ស៊ីម ដែល​អាចប្រើ​ដើម្បី​តាមដាន​ទីតាំង​ឧបករណ៍។ "<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>
diff --git a/libs/WifiTrackerLib/res/values-kn/strings.xml b/libs/WifiTrackerLib/res/values-kn/strings.xml
index 6793a96bb..1340a6677 100644
--- a/libs/WifiTrackerLib/res/values-kn/strings.xml
+++ b/libs/WifiTrackerLib/res/values-kn/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"ಕಳಪೆ ಕನೆಕ್ಷನ್"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"ಯಾವುದೂ ಇಲ್ಲ"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"ಅವಧಿ ಮುಕ್ತಾಯವಾಗಿದೆ"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"ಸೈನ್ ಅಪ್ ಮಾಡಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"ಸೈನ್-ಅಪ್ ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"ಸೈನ್-ಅಪ್ ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"ಸೈನ್-ಅಪ್ ಪೂರ್ಣಗೊಂಡಿದೆ. ಕನೆಕ್ಟ್ ಆಗುತ್ತಿದೆ…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"ಸಾಧನದ ಸ್ಥಳವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬಳಸಬಹುದಾದ ಅನನ್ಯ ಐಡಿಯನ್ನು ಈ ನೆಟ್‌ವರ್ಕ್ ಸ್ವೀಕರಿಸುತ್ತದೆ. "<annotation id="url">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"ಸಾಧನದ ಸ್ಥಳವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬಳಸಬಹುದಾದ ಅನನ್ಯ ಐಡಿಯನ್ನು ಈ ನೆಟ್‌ವರ್ಕ್ ಸ್ವೀಕರಿಸುತ್ತದೆ. "<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>
diff --git a/libs/WifiTrackerLib/res/values-ko/strings.xml b/libs/WifiTrackerLib/res/values-ko/strings.xml
index eea05e893..ee9d54c67 100644
--- a/libs/WifiTrackerLib/res/values-ko/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ko/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"품질 낮음"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"없음"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"만료됨"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"가입하려면 탭하세요."</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"가입 완료 중…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"가입을 완료할 수 없습니다. 다시 시도하려면 탭하세요."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"가입이 완료되었습니다. 연결 중…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"이 네트워크는 기기 위치 추적에 사용될 수 있는 고유 ID를 수신합니다. "<annotation id="url">"자세히 알아보기"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"이 네트워크는 기기 위치 추적에 사용될 수 있는 SIM 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>
diff --git a/libs/WifiTrackerLib/res/values-ky/arrays.xml b/libs/WifiTrackerLib/res/values-ky/arrays.xml
index 8bcf77784..00ab8f678 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-ky/strings.xml b/libs/WifiTrackerLib/res/values-ky/strings.xml
index 529410306..f38ae79fe 100644
--- a/libs/WifiTrackerLib/res/values-ky/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ky/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Начар сапат"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Жок"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Эскирип калган"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Катталуу үчүн таптап коюңуз"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Катталуу аяктоодо…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Катталуу аягына чыккан жок. Кайра аракет кылуу үчүн таптап коюңуз."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Катталуу аягына чыкты. Туташууда…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Бул тармакка өзгөчө идентификатор берилет жана аны түзмөктүн жайгашкан жерин көзөмөлдөп туруу үчүн колдонууга болот. "<annotation id="url">"Кеңири маалымат"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Бул тармакка SIM-картанын идентификатору берилет жана аны түзмөктүн жайгашкан жерин көзөмөлдөп туруу үчүн колдонууга болот. "<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>
diff --git a/libs/WifiTrackerLib/res/values-lo/strings.xml b/libs/WifiTrackerLib/res/values-lo/strings.xml
index 96d421bc8..c1f28f21c 100644
--- a/libs/WifiTrackerLib/res/values-lo/strings.xml
+++ b/libs/WifiTrackerLib/res/values-lo/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"ຄຸນນະພາບຕໍ່າ"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"ບໍ່ໃຊ້"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"ໝົດອາຍຸແລ້ວ"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"ແຕະເພື່ອສະໝັກ"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"ກຳລັງສຳເລັດການສະໝັກ…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"ບໍ່ສາມາດສຳເລັດການສະໝັກໄດ້. ແຕະເພື່ອລອງໃໝ່."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"ສະໝັກສຳເລັດແລ້ວ. ກຳລັງເຊື່ອມຕໍ່…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"ເຄືອຂ່າຍນີ້ຈະຮັບ unique ID ທີ່ສາມາດໃຊ້ເພື່ອຕິດຕາມສະຖານທີ່ອຸປະກອນ "<annotation id="url">"ສຶກສາເພີ່ມເຕີມ"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"ເຄືອຂ່າຍນີ້ຈະຮັບ 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>
diff --git a/libs/WifiTrackerLib/res/values-lt/strings.xml b/libs/WifiTrackerLib/res/values-lt/strings.xml
index ff32f1c66..40d3f1e4d 100644
--- a/libs/WifiTrackerLib/res/values-lt/strings.xml
+++ b/libs/WifiTrackerLib/res/values-lt/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Ribotas ryšys"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Privataus DNS serverio negalima pasiekti"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Nėra interneto ryšio"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Prastas ryšys"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Nėra"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Baigėsi galiojimo laikas"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Palieskite, kad prisiregistruotumėte"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Baigiamas prisiregistravimas…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Nepavyko užbaigti prisiregistravimo. Jei norite bandyti dar kartą, palieskite."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Prisiregistravimas baigtas. Prijungiama…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Šis tinklas gauna unikalų ID, kurį galima naudoti įrenginio vietovei stebėti. "<annotation id="url">"Sužinokite daugiau"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Šis tinklas gauna SIM kortelės ID, kurį galima naudoti įrenginio vietovei stebėti. "<annotation id="url">"Sužinokite daugiau"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Labai lėtas"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lėtas"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Gerai"</string>
diff --git a/libs/WifiTrackerLib/res/values-lv/strings.xml b/libs/WifiTrackerLib/res/values-lv/strings.xml
index 4aebe323f..1450cfcd0 100644
--- a/libs/WifiTrackerLib/res/values-lv/strings.xml
+++ b/libs/WifiTrackerLib/res/values-lv/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Ierobežots savienojums"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Nevar piekļūt privātam DNS serverim."</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Nav interneta"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Zema kvalitāte"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Nav"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Beidzies derīguma termiņš"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Pieskarieties, lai reģistrētos."</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Notiek reģistrācijas pabeigšana…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Nevarēja pabeigt reģistrāciju. Pieskarieties, lai mēģinātu vēlreiz."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Reģistrācija ir pabeigta. Notiek savienojuma izveide…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Šis tīkls saņem unikālo ID, ko var izmantot, lai izsekotu ierīces atrašanās vietu. "<annotation id="url">"Uzziniet vairāk"</annotation>"."</string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Šis tīkls saņem SIM ID, ko var izmantot, lai izsekotu ierīces atrašanās vietai. "<annotation id="url">"Uzziniet vairāk"</annotation>"."</string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Ļoti lēns"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lēns"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Labi"</string>
diff --git a/libs/WifiTrackerLib/res/values-mk/strings.xml b/libs/WifiTrackerLib/res/values-mk/strings.xml
index 36064f335..93d47f910 100644
--- a/libs/WifiTrackerLib/res/values-mk/strings.xml
+++ b/libs/WifiTrackerLib/res/values-mk/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Лош квалитет"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ниедна"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Истечено"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Допрете за да се регистрирате"</string>
@@ -44,9 +45,9 @@
<string name="osu_opening_provider" msgid="5633521771769175139">"Се отвора <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="8503501619299851793">"Не може да се поврзе"</string>
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Се завршува регистрацијата…"</string>
- <string name="osu_sign_up_failed" msgid="2725057866968590279">"Не можеше да се заврши регистрацијата. Допрете за да се обидете повторно."</string>
+ <string name="osu_sign_up_failed" msgid="2725057866968590279">"Не може да се заврши регистрацијата. Допрете за да се обидете повторно."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Регистрацијата е завршена. Се поврзува…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Мрежава прима уникатен ID што може да се користи за следење на локацијата на уредот. "<annotation id="url">"Дознајте повеќе"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Мрежава прима ID на SIM-картичка што може да се користи за следење на локацијата на уредот. "<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>
diff --git a/libs/WifiTrackerLib/res/values-ml/strings.xml b/libs/WifiTrackerLib/res/values-ml/strings.xml
index 90798a616..2a69021ca 100644
--- a/libs/WifiTrackerLib/res/values-ml/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ml/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"കുറഞ്ഞ നിലവാരം"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"ഒന്നുമില്ല"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"കാലഹരണപ്പെട്ടത്"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"സൈൻ അപ്പ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"സൈൻ അപ്പ് പൂർത്തിയാക്കുന്നു…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"സൈൻ അപ്പ് പൂർത്തിയാക്കാനായില്ല. വീണ്ടും ശ്രമിക്കാൻ ടാപ്പ് ചെയ്യുക."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"സൈൻ അപ്പ് പൂർത്തിയായി. കണക്റ്റ് ചെയ്യുന്നു…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"ഉപകരണ ലൊക്കേഷൻ ട്രാക്ക് ചെയ്യാൻ ഉപയോഗിക്കാവുന്ന തനത് ഐഡി ഈ നെറ്റ്‌വർക്ക് സ്വീകരിക്കുന്നു. "<annotation id="url">"കൂടുതലറിയുക"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"ഉപകരണ ലൊക്കേഷൻ ട്രാക്ക് ചെയ്യാൻ ഉപയോഗിക്കാവുന്ന സിം ഐഡി ഈ നെറ്റ്‌വർക്കിന് ലഭിക്കും. "<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>
diff --git a/libs/WifiTrackerLib/res/values-mn/strings.xml b/libs/WifiTrackerLib/res/values-mn/strings.xml
index 577bd6eaa..9e9b247e6 100644
--- a/libs/WifiTrackerLib/res/values-mn/strings.xml
+++ b/libs/WifiTrackerLib/res/values-mn/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>
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Чанар муу"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Байхгүй"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Хугацаа дууссан"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Бүртгүүлэхийн тулд товшино уу"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Бүртгэлийг дуусгаж байна…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Бүртгэлийг дуусгаж чадсангүй. Дахин оролдохын тулд товшино уу."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Бүртгэлийг дуусгалаа. Холбогдож байна…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Энэ сүлжээ нь төхөөрөмжийн байршлыг тандахад ашиглах боломжтой цор ганц дугаарыг хүлээн авдаг. "<annotation id="url">"Нэмэлт мэдээлэл авах"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Энэ сүлжээ нь төхөөрөмжийн байршлыг тандахад ашиглах боломжтой SIM 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>
diff --git a/libs/WifiTrackerLib/res/values-mr/strings.xml b/libs/WifiTrackerLib/res/values-mr/strings.xml
index fc7811f18..963956f51 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>
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"कमी गुणवत्ता"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"काहीही नाही"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"मुदत संपली"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"साइन अप करण्यासाठी टॅप करा"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"साइन-अप पूर्ण होत आहे…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"साइन-अप पूर्ण करता आले नाही. पुन्हा प्रयत्न करण्यासाठी टॅप करा."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"साइन-अप पूर्ण झाले आहे. कनेक्ट करत आहे…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"हे नेटवर्क डिव्हाइसच्या स्थानाचा माग घेण्यासाठी वापरता येणारा युनिक आयडी मिळवते. "<annotation id="url">"अधिक जाणून घ्या"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"हे नेटवर्क डिव्हाइसच्या स्थानाचा माग ठेवण्यासाठी वापरता येणारा सिम आयडी मिळवते. "<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>
diff --git a/libs/WifiTrackerLib/res/values-ms/strings.xml b/libs/WifiTrackerLib/res/values-ms/strings.xml
index 81b0ce3b8..8d06b4208 100644
--- a/libs/WifiTrackerLib/res/values-ms/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ms/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Sambungan terhad"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Pelayan DNS peribadi tidak boleh diakses"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Tiada Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Kualiti rendah"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Tiada"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Tamat tempoh"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Ketik untuk daftar"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Menyelesaikan pendaftaran…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Tidak dapat menyelesaikan pendaftaran. Ketik untuk mencuba lagi."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Pendaftaran selesai. Menyambung…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Rangkaian ini menerima ID unik yang boleh digunakan untuk menjejaki lokasi peranti. "<annotation id="url">"Ketahui lebih lanjut"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Rangkaian ini menerima ID SIM yang boleh digunakan untuk menjejak lokasi peranti. "<annotation id="url">"Ketahui lebih lanjut"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Sangat Perlahan"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Perlahan"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-my/strings.xml b/libs/WifiTrackerLib/res/values-my/strings.xml
index a3f67e1c3..524fbb612 100644
--- a/libs/WifiTrackerLib/res/values-my/strings.xml
+++ b/libs/WifiTrackerLib/res/values-my/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>
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"အရည်အသွေး နိမ့်သည်"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"မရှိ"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"သက်တမ်းကုန်သွားပါပြီ"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"အကောင့်ဖွင့်ရန် တို့ပါ"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"အကောင့်ဖွင့်ခြင်း အပြီးသတ်နေသည်…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"အကောင့်ဖွင့်ခြင်း အပြီးသတ်၍ မရပါ။ ထပ်စမ်းကြည့်ရန် တို့ပါ။"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"အကောင့်ဖွင့်ပြီးပါပြီ။ ချိတ်ဆက်နေသည်…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"ဤကွန်ရက်က စက်တည်နေရာကို ခြေရာခံရန် အသုံးပြုနိုင်သည့် သီးသန့် ID ကို ရရှိပါသည်။ "<annotation id="url">"ပိုမိုလေ့လာရန်"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"ဤကွန်ရက်က စက်တည်နေရာကို ခြေရာခံရန် အသုံးပြုနိုင်သည့် SIM 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">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-nb/strings.xml b/libs/WifiTrackerLib/res/values-nb/strings.xml
index 8379223da..0a670a83f 100644
--- a/libs/WifiTrackerLib/res/values-nb/strings.xml
+++ b/libs/WifiTrackerLib/res/values-nb/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Begrenset tilkobling"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Den private DNS-tjeneren kan ikke nås"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Ingen internettilkobling"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Lav kvalitet"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ingen"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Utløpt"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Trykk for å registrere deg"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Fullfører registreringen …"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Kunne ikke fullføre registreringen. Trykk for å prøve på nytt."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registreringen er fullført. Kobler til …"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Dette nettverket mottar en unik ID som kan brukes til å spore enhetsposisjonen. "<annotation id="url">"Finn ut mer"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Dette nettverket mottar en SIM-ID som kan brukes til å spore enhetsposisjonen. "<annotation id="url">"Finn ut mer"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Veldig treg"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Treg"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Ok"</string>
diff --git a/libs/WifiTrackerLib/res/values-ne/strings.xml b/libs/WifiTrackerLib/res/values-ne/strings.xml
index 39e62d8b7..cc330a577 100644
--- a/libs/WifiTrackerLib/res/values-ne/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ne/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"न्यून गुणस्तर"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"कुनै पनि होइन"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"म्याद सकियो"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"साइन अप गर्न ट्याप गर्नुहोस्"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"साइन अप गर्ने कार्य सम्पन्न गर्दै…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"साइन अप गर्ने कार्य सम्पन्न गर्न सकिएन। फेरि प्रयास गर्न ट्याप गर्नुहोस्।"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"साइन अप गर्ने कार्य सम्पन्न भयो। जोड्दै…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"यो नेटवर्कले यन्त्रको स्थान पहिल्याउन प्रयोग गर्न सकिने एउटा अद्वित्तीय ID प्राप्त गर्छ। "<annotation id="url">"थप जान्नुहोस्"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"यो नेटवर्कलाई यन्त्रको स्थान पहिल्याउन प्रयोग गर्न मिल्ने एउटा अद्वितीय SIM कार्ड 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>
diff --git a/libs/WifiTrackerLib/res/values-nl/strings.xml b/libs/WifiTrackerLib/res/values-nl/strings.xml
index a02642986..3b68fc451 100644
--- a/libs/WifiTrackerLib/res/values-nl/strings.xml
+++ b/libs/WifiTrackerLib/res/values-nl/strings.xml
@@ -24,7 +24,7 @@
<string name="wifi_disabled_password_failure" msgid="3015007143699702403">"Verificatieprobleem"</string>
<string name="wifi_check_password_try_again" msgid="2643230209986217827">"Controleer het wachtwoord en probeer het opnieuw"</string>
<string name="wifi_disabled_network_failure" msgid="6506742207778007439">"IP-configuratie mislukt"</string>
- <string name="wifi_disabled_generic" msgid="8307050327779256414">"Uitgeschakeld"</string>
+ <string name="wifi_disabled_generic" msgid="8307050327779256414">"Uitgezet"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="6552198761671428871">"Toegangspunt tijdelijk vol"</string>
<string name="wifi_disconnected" msgid="3720926757662831062">"Verbinding verbroken"</string>
<string name="wifi_remembered" msgid="5126903736498678708">"Opgeslagen"</string>
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Beperkte verbinding"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Geen toegang tot privé-DNS-server"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Geen internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Lage kwaliteit"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Geen"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Verlopen"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Tik om aan te melden"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Aanmelding voltooien…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Kan aanmelding niet voltooien. Tik om het opnieuw te proberen."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Aanmelding voltooid. Verbinden…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Dit netwerk ontvangt een unieke ID die kan worden gebruikt om de apparaatlocatie bij te houden. "<annotation id="url">"Meer informatie"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Dit netwerk ontvangt een simkaart-ID die kan worden gebruikt om de apparaatlocatie bij te houden. "<annotation id="url">"Meer informatie"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Zeer langzaam"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Langzaam"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Redelijk"</string>
diff --git a/libs/WifiTrackerLib/res/values-or/strings.xml b/libs/WifiTrackerLib/res/values-or/strings.xml
index cec830b29..15b645990 100644
--- a/libs/WifiTrackerLib/res/values-or/strings.xml
+++ b/libs/WifiTrackerLib/res/values-or/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"ନିମ୍ନ ଗୁଣବତ୍ତା"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"କିଛି ନାହିଁ"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"ମିଆଦ ଶେଷ ହୋଇଯାଇଛି"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"ସାଇନ୍ ଅପ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"ସାଇନ୍ ଅପ୍ ଶେଷ ହେଉଛି…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"ସାଇନ୍ ଅପ୍ ଶେଷ ହୋଇପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"ସାଇନ୍ ଅପ୍ ଶେଷ ହୋଇଛି। ସଂଯୋଗ କରୁଛି…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"ଏହି ନେଟୱାର୍କ ଏକ ସ୍ୱତନ୍ତ୍ର ID ପ୍ରାପ୍ତ କରେ ଯାହାକୁ ଡିଭାଇସ୍ ଲୋକେସନ୍ ଟ୍ରାକ୍ କରିବା ପାଇଁ ବ୍ୟବହାର କରାଯାଇପାରିବ। "<annotation id="url">"ଅଧିକ ଜାଣନ୍ତୁ"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"ଏହି ନେଟୱାର୍କ ଏକ SIM 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>
diff --git a/libs/WifiTrackerLib/res/values-pa/strings.xml b/libs/WifiTrackerLib/res/values-pa/strings.xml
index 7966cd75c..de3c29f41 100644
--- a/libs/WifiTrackerLib/res/values-pa/strings.xml
+++ b/libs/WifiTrackerLib/res/values-pa/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"ਠੀਕ-ਠਾਕ ਕਨੈਕਸ਼ਨ"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"ਕੋਈ ਨਹੀਂ"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"ਮਿਆਦ ਮੁੱਕ ਗਈ"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"ਸਾਈਨ-ਅੱਪ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"ਸਾਈਨ-ਅੱਪ ਮੁਕੰਮਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"ਸਾਈਨ-ਅੱਪ ਮੁਕੰਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"ਸਾਈਨ-ਅੱਪ ਮੁਕੰਮਲ ਹੋਇਆ। ਕਨੈਕਟ ਹੋ ਰਿਹਾ ਹੈ…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"ਇਹ ਨੈੱਟਵਰਕ ਇੱਕ ਵਿਲੱਖਣ ਆਈਡੀ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ ਜਿਸਨੂੰ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਵਰਤਿਆ ਦਾ ਸਕਦਾ ਹੈ। "<annotation id="url">"ਹੋਰ ਜਾਣੋ"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"ਇਹ ਨੈੱਟਵਰਕ ਇੱਕ ਸਿਮ ਆਈਡੀ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ ਜਿਸਨੂੰ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ। "<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>
diff --git a/libs/WifiTrackerLib/res/values-pl/strings.xml b/libs/WifiTrackerLib/res/values-pl/strings.xml
index f4d5cca1e..222627de7 100644
--- a/libs/WifiTrackerLib/res/values-pl/strings.xml
+++ b/libs/WifiTrackerLib/res/values-pl/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Ograniczone połączenie"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Brak dostępu do prywatnego serwera DNS"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Brak internetu"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Niska jakość"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Brak"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Ważność wygasła"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Kliknij, by się zarejestrować"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Kończę rejestrować…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Nie udało się dokończyć rejestracji. Kliknij, by spróbować ponownie."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Rejestracja zakończona. Łączę…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ta sieć otrzymuje unikalny identyfikator, który można wykorzystać do śledzenia lokalizacji urządzenia. "<annotation id="url">"Więcej informacji"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ta sieć otrzymuje unikalny identyfikator karty SIM, który można wykorzystać do śledzenia lokalizacji urządzenia. "<annotation id="url">"Więcej informacji"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Bardzo wolna"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Wolna"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-pt-rBR/strings.xml b/libs/WifiTrackerLib/res/values-pt-rBR/strings.xml
index d3adf5242..3b86fa621 100644
--- a/libs/WifiTrackerLib/res/values-pt-rBR/strings.xml
+++ b/libs/WifiTrackerLib/res/values-pt-rBR/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Conexão limitada"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Não é possível acessar o servidor DNS privado"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Sem Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Conexão lenta"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Nenhuma"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Expirada"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Toque para se inscrever"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Concluindo inscrição…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Inscrição concluída. Conectando…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Esta rede recebe um código exclusivo que pode ser usado para rastrear a localização do dispositivo. "<annotation id="url">"Saiba mais"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Essa rede recebe um ID de chip que pode ser usado para monitorar o local do dispositivo. "<annotation id="url">"Saiba mais"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Muito lenta"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lenta"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Ok"</string>
diff --git a/libs/WifiTrackerLib/res/values-pt-rPT/strings.xml b/libs/WifiTrackerLib/res/values-pt-rPT/strings.xml
index bcce991e4..f96f6f096 100644
--- a/libs/WifiTrackerLib/res/values-pt-rPT/strings.xml
+++ b/libs/WifiTrackerLib/res/values-pt-rPT/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Ligação limitada"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Não é possível aceder ao servidor DNS."</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Sem Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Baixa qualidade"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Nenhuma"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Expirada"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Toque para se inscrever."</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"A concluir a inscrição…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Inscrição concluída. A estabelecer ligação…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Esta rede recebe um ID exclusivo que pode ser utilizado para monitorizar a localização do dispositivo. "<annotation id="url">"Saber mais"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Esta rede recebe um ID do SIM que pode ser utilizado para monitorizar a localização do dispositivo. "<annotation id="url">"Saiba mais"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Muito lenta"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lenta"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-pt/strings.xml b/libs/WifiTrackerLib/res/values-pt/strings.xml
index d3adf5242..3b86fa621 100644
--- a/libs/WifiTrackerLib/res/values-pt/strings.xml
+++ b/libs/WifiTrackerLib/res/values-pt/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Conexão limitada"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Não é possível acessar o servidor DNS privado"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Sem Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Conexão lenta"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Nenhuma"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Expirada"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Toque para se inscrever"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Concluindo inscrição…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Inscrição concluída. Conectando…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Esta rede recebe um código exclusivo que pode ser usado para rastrear a localização do dispositivo. "<annotation id="url">"Saiba mais"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Essa rede recebe um ID de chip que pode ser usado para monitorar o local do dispositivo. "<annotation id="url">"Saiba mais"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Muito lenta"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lenta"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Ok"</string>
diff --git a/libs/WifiTrackerLib/res/values-ro/strings.xml b/libs/WifiTrackerLib/res/values-ro/strings.xml
index e4d24ebd7..219e4c44d 100644
--- a/libs/WifiTrackerLib/res/values-ro/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ro/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Conexiune limitată"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Serverul DNS privat nu poate fi accesat"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Fără conexiune la internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Calitate slabă"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Niciuna"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Expirat"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Atingeți pentru a vă înscrie"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Se finalizează înscrierea…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Nu s-a putut finaliza înscrierea. Atingeți pentru a încerca din nou."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Înscrierea a fost finalizată. Se conectează…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Această rețea primește un ID unic care se poate folosi pentru a urmări locația dispozitivului. "<annotation id="url">"Aflați mai multe"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Această rețea primește un cod SIM care se poate folosi pentru a urmări locația dispozitivului. "<annotation id="url">"Aflați mai multe"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Foarte lentă"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Lentă"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Bine"</string>
diff --git a/libs/WifiTrackerLib/res/values-ru/strings.xml b/libs/WifiTrackerLib/res/values-ru/strings.xml
index f8dc5c8e1..672781b73 100644
--- a/libs/WifiTrackerLib/res/values-ru/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ru/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"низкое качество"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Без защиты"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Срок действия истек"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Нажмите, чтобы зарегистрироваться."</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Завершение регистрации…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Не удалось завершить регистрацию. Нажмите, чтобы повторить попытку."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Регистрация завершена. Подключение…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Эта сеть получает уникальный идентификатор, с помощью которого можно отследить местоположение устройства. "<annotation id="url">"Подробнее…"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Этой сети будет передан идентификатор SIM-карты, с помощью которого можно отследить местоположение устройства. "<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>
diff --git a/libs/WifiTrackerLib/res/values-si/strings.xml b/libs/WifiTrackerLib/res/values-si/strings.xml
index 16a050149..cee255f56 100644
--- a/libs/WifiTrackerLib/res/values-si/strings.xml
+++ b/libs/WifiTrackerLib/res/values-si/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"අඩු ගුණත්වය"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"කිසිවක් නැත"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"කල් ඉකුත් විය"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"ලියාපදිංචි වීමට තට්ටු කරන්න"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"ලියාපදිංචිය සම්පූර්ණ කරමින්…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"ලියාපදිංචිය සම්පූර්ණ කළ නොහැකි විය. නැවත උත්සාහ කිරීමට තට්ටු කරන්න."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"ලියාපදිංචිය සම්පූර්ණයි. සබැඳෙමින්…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"උපාංග ස්ථානය නිරීක්ෂණය කිරීමට භාවිත කළ හැකි අනන්‍ය ID එකක් මෙම ජාලයට ලැබේ "<annotation id="url">"තව දැන ගන්න"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"උපාංග ස්ථානය නිරීක්ෂණය කිරීමට භාවිත කළ හැකි SIM 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>
diff --git a/libs/WifiTrackerLib/res/values-sk/strings.xml b/libs/WifiTrackerLib/res/values-sk/strings.xml
index d432ef622..11fd338e1 100644
--- a/libs/WifiTrackerLib/res/values-sk/strings.xml
+++ b/libs/WifiTrackerLib/res/values-sk/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Obmedzené pripojenie"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"K súkromnému serveru DNS sa nepodarilo získať prístup"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Bez internetu"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Nízka kvalita"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Žiadne"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Platnosť vypršala"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Prihláste sa klepnutím"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Dokončuje sa registrácia…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Registráciu sa nepodarilo dokončiť. Klepnutím to skúste znova."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registrácia je dokončená. Pripája sa…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Táto sieť prijíma jedinečný identifikátor, pomocou ktorého je možné sledovať polohu zariadenia. "<annotation id="url">"Ďalšie informácie"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Táto sieť dostáva jedinečný identifikátor SIM karty, pomocou ktorého je možné sledovať polohu zariadenia. "<annotation id="url">"Ďalšie informácie"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Veľmi pomalá"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Pomalá"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-sl/strings.xml b/libs/WifiTrackerLib/res/values-sl/strings.xml
index 4501d8282..8cd9ef55b 100644
--- a/libs/WifiTrackerLib/res/values-sl/strings.xml
+++ b/libs/WifiTrackerLib/res/values-sl/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Omejena povezava"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Do zasebnega strežnika DNS ni mogoče dostopati"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Ni internetne povezave"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Nizka kakovost"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Brez"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Poteklo"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Dotaknite se, če se želite registrirati"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Dokončevanje registracije …"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Registracije ni bilo mogoče dokončati. Če želite poskusiti znova, se dotaknite."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registracija je končana. Povezovanje …"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"To omrežje prejme enolični ID, s katerim je mogoče spremljati lokacijo naprave. "<annotation id="url">"Več o tem"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"To omrežje prejme ID kartice SIM, s katerim je mogoče spremljati lokacijo naprave. "<annotation id="url">"Več o tem"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Zelo počasna"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Počasna"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"V redu"</string>
diff --git a/libs/WifiTrackerLib/res/values-sq/strings.xml b/libs/WifiTrackerLib/res/values-sq/strings.xml
index dde5ee031..90c72ac56 100644
--- a/libs/WifiTrackerLib/res/values-sq/strings.xml
+++ b/libs/WifiTrackerLib/res/values-sq/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Lidhje e kufizuar"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Serveri privat DNS nuk mund të qaset"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Nuk ka internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Cilësi e ulët"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Asnjë"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Skaduar"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Trokit për t\'u regjistruar"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Po përfundon regjistrimin…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Regjistrimi nuk mund të përfundonte. Trokit për të provuar përsëri."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Regjistrimi përfundoi. Po lidhet…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ky rrjet merr një ID unike që mund të përdoret për të monitoruar vendndodhjen e pajisjes. "<annotation id="url">"Mëso më shumë"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ky rrjet merr një ID karte SIM që mund të përdoret për të monitoruar vendndodhjen e pajisjes. "<annotation id="url">"Mëso më shumë"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Shumë e ulët"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"E ngadaltë"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Në rregull"</string>
diff --git a/libs/WifiTrackerLib/res/values-sr/strings.xml b/libs/WifiTrackerLib/res/values-sr/strings.xml
index 1d133e378..007e58ebe 100644
--- a/libs/WifiTrackerLib/res/values-sr/strings.xml
+++ b/libs/WifiTrackerLib/res/values-sr/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Лош квалитет"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ништа"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Истекло"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Додирните да бисте се регистровали"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Регистрација се довршава…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Довршавање регистрације није успело. Додирните да бисте пробали поново."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Регистрација је довршена. Повезује се…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ова мрежа захтева јединствени ИД који може да се користи за праћење локације уређаја. "<annotation id="url">"Сазнајте више"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ова мрежа добија ИД SIM картице који може да се користи за праћење локације уређаја. "<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>
diff --git a/libs/WifiTrackerLib/res/values-sv/strings.xml b/libs/WifiTrackerLib/res/values-sv/strings.xml
index 589ab849f..af1f0c4ff 100644
--- a/libs/WifiTrackerLib/res/values-sv/strings.xml
+++ b/libs/WifiTrackerLib/res/values-sv/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Begränsad anslutning"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Det går inte att komma åt den privata DNS-servern."</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Inget internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Låg kvalitet"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Ingen"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Har upphört att gälla"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Tryck för att registrera dig"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Registreringen slutförs …"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Det gick inte att slutföra registreringen. Tryck för att försöka igen."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registrering har slutförts. Ansluter …"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Det här nätverket får ett unikt id som kan användas till att spåra enhetens plats. "<annotation id="url">"Läs mer"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Det här nätverket får ett SIM-id som kan användas till att spåra enhetens plats. "<annotation id="url">"Läs mer"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Mycket långsam"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Långsam"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Okej"</string>
diff --git a/libs/WifiTrackerLib/res/values-sw/strings.xml b/libs/WifiTrackerLib/res/values-sw/strings.xml
index 573ba22d1..a4bc8aaf6 100644
--- a/libs/WifiTrackerLib/res/values-sw/strings.xml
+++ b/libs/WifiTrackerLib/res/values-sw/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Muunganisho hafifu"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Seva ya faragha ya DNS haiwezi kufikiwa"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Hakuna intaneti"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Ubora wa chini"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Hamna"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Muda umeisha"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Gusa ili ujisajili"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Inakamilisha usajili…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Imeshindwa kukamilisha usajili. Gusa ili ujaribu tena."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Imekamilisha usajili. Inaunganisha…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Mtandao huu hupokea kitambulisho cha kipekee ambacho kinaweza kutumiwa kufuatilia mahali kifaa kilipo. "<annotation id="url">"Pata maelezo zaidi"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Mtandao huu hupokea kitambulisho cha SIM ambacho kinaweza kutumiwa kufuatilia mahali kifaa kilipo. "<annotation id="url">"Pata maelezo zaidi"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Polepole Sana"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Polepole"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Sawa"</string>
diff --git a/libs/WifiTrackerLib/res/values-ta/strings.xml b/libs/WifiTrackerLib/res/values-ta/strings.xml
index 5b2f25843..720698115 100644
--- a/libs/WifiTrackerLib/res/values-ta/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ta/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"குறைந்த தரம்"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"ஏதுமில்லை"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"காலாவதியாகிவிட்டது"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"பதிவு செய்ய தட்டவும்"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"பதிவு செய்தல் நிறைவடைகிறது…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"பதிவு செய்தலை நிறைவுசெய்ய முடியவில்லை. மீண்டும் முயல தட்டவும்."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"பதிவு செய்தல் நிறைவடைந்தது. இணைக்கிறது…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"இந்த நெட்வொர்க்கானது சாதன இருப்பிடத்தை டிராக் செய்யப் பயன்படுத்தப்படும் தனித்துவமான ஐடியைப் பெறும். "<annotation id="url">"மேலும் அறிக"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"சாதன இருப்பிடத்தைக் கண்காணிக்கப் பயன்படுத்தப்படும் சிம் ஐடியை இந்த நெட்வொர்க் பெறும். "<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>
diff --git a/libs/WifiTrackerLib/res/values-te/strings.xml b/libs/WifiTrackerLib/res/values-te/strings.xml
index aef857dea..ede7edf00 100644
--- a/libs/WifiTrackerLib/res/values-te/strings.xml
+++ b/libs/WifiTrackerLib/res/values-te/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"తక్కువ క్వాలిటీ"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"ఏదీ లేదు"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"గడువు ముగిసింది"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"సైన్ అప్ చేయడానికి ట్యాప్ చేయండి"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"సైన్ అప్ పూర్తవుతోంది…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"సైన్ అప్‌ను పూర్తి చేయడం సాధ్యపడలేదు. మళ్ళీ ప్రయత్నించడానికి ట్యాప్ చేయండి."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"సైన్ అప్ పూర్తయింది. కనెక్ట్ చేయబడుతోంది…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"పరికర లొకేషన్‌ను ట్రాక్ చేయడానికి ఉపయోగపడే యూనిక్ IDని ఈ నెట్‌వర్క్ అందుకుంటుంది. "<annotation id="url">"మరింత తెలుసుకోండి"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"పరికరం లొకేషన్‌ను ట్రాక్ చేయడానికి ఉపయోగపడే SIM 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>
diff --git a/libs/WifiTrackerLib/res/values-th/strings.xml b/libs/WifiTrackerLib/res/values-th/strings.xml
index 716d2327d..cc18e7fec 100644
--- a/libs/WifiTrackerLib/res/values-th/strings.xml
+++ b/libs/WifiTrackerLib/res/values-th/strings.xml
@@ -28,7 +28,7 @@
<string name="wifi_ap_unable_to_handle_new_sta" msgid="6552198761671428871">"จุดเข้าใช้งานเต็มชั่วคราว"</string>
<string name="wifi_disconnected" msgid="3720926757662831062">"ยกเลิกการเชื่อมต่อแล้ว"</string>
<string name="wifi_remembered" msgid="5126903736498678708">"บันทึกแล้ว"</string>
- <string name="wifi_metered_label" msgid="1362621600006544014">"มีการวัดปริมาณอินเทอร์เน็ต"</string>
+ <string name="wifi_metered_label" msgid="1362621600006544014">"แบบจำกัดปริมาณ"</string>
<string name="wifi_unmetered_label" msgid="499466875639448350">"ไม่มีการวัดปริมาณอินเทอร์เน็ต"</string>
<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>
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"คุณภาพต่ำ"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"ไม่มี"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"หมดอายุแล้ว"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"แตะเพื่อลงชื่อสมัครใช้"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"กำลังลงชื่อสมัครใช้ให้เสร็จสิ้น…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"ลงชื่อสมัครใช้ไม่สำเร็จ แตะเพื่อลองอีกครั้ง"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"การลงชื่อสมัครใช้เสร็จสมบูรณ์ กำลังเชื่อมต่อ…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"เครือข่ายนี้ได้รับรหัสที่ไม่ซ้ำกันซึ่งใช้ติดตามตำแหน่งอุปกรณ์ได้ "<annotation id="url">"ดูข้อมูลเพิ่มเติม"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"เครือข่ายนี้จะได้รับรหัส SIM ซึ่งใช้ติดตามตำแหน่งอุปกรณ์ได้ "<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>
diff --git a/libs/WifiTrackerLib/res/values-tl/strings.xml b/libs/WifiTrackerLib/res/values-tl/strings.xml
index a55511ea6..ccb973ac8 100644
--- a/libs/WifiTrackerLib/res/values-tl/strings.xml
+++ b/libs/WifiTrackerLib/res/values-tl/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Limitadong koneksyon"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Hindi ma-access ang pribadong DNS server"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Walang internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Mababang kalidad"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Wala"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Nag-expire na"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"I-tap para mag-sign up"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Kinukumpleto ang pag-sign up…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Hindi makumpleto ang pag-sign up. I-tap para subukan ulit."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Kumpleto na ang pag-sign up. Kumokonekta…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Tumatanggap ang network na ito ng natatanging ID na magagamit sa pag-track ng lokasyon ng device. "<annotation id="url">"Matuto pa"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Tumatanggap ang network na ito ng SIM ID na magagamit sa pagsubaybay ng lokasyon ng device. "<annotation id="url">"Matuto pa"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Napakabagal"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Mabagal"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-tr/strings.xml b/libs/WifiTrackerLib/res/values-tr/strings.xml
index 6673fff46..a480a3d06 100644
--- a/libs/WifiTrackerLib/res/values-tr/strings.xml
+++ b/libs/WifiTrackerLib/res/values-tr/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Sınırlı bağlantı"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Gizli DNS sunucusuna erişilemiyor"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"İnternet yok"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Düşük kalite"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Yok"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Süresi sona erdi"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Kaydolmak için dokunun"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Kayıt işlemi tamamlanıyor…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Kayıt işlemi tamamlanamadı. Tekrar denemek için dokunun."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Kayıt tamamlandı. Bağlanıyor…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Bu ağ, cihaz konumunu izlemek için kullanılabilecek benzersiz bir kimlik alır. "<annotation id="url">"Daha fazla bilgi"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Bu ağ, cihaz konumunu izlemek için kullanılabilecek bir SIM kimliği alır. "<annotation id="url">"Daha fazla bilgi"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Çok Yavaş"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Yavaş"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Tamam"</string>
diff --git a/libs/WifiTrackerLib/res/values-uk/strings.xml b/libs/WifiTrackerLib/res/values-uk/strings.xml
index 94b9852d0..8a6965818 100644
--- a/libs/WifiTrackerLib/res/values-uk/strings.xml
+++ b/libs/WifiTrackerLib/res/values-uk/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Низька якість"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Немає"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Термін дії минув"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Торкніться, щоб зареєструватись"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Завершення реєстрації…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Не вдалося завершити реєстрацію. Торкніться, щоб повторити спробу."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Реєстрацію завершено. Підключення…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Ця мережа отримує унікальний ідентифікатор, за допомогою якого можна відстежити місцезнаходження пристрою. "<annotation id="url">"Докладніше"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Ця мережа отримує ідентифікатор SIM-карти, за допомогою якого можна відстежити місцезнаходження пристрою. "<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>
diff --git a/libs/WifiTrackerLib/res/values-ur/strings.xml b/libs/WifiTrackerLib/res/values-ur/strings.xml
index 84ae38dce..2bc36a53b 100644
--- a/libs/WifiTrackerLib/res/values-ur/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ur/strings.xml
@@ -22,7 +22,7 @@
<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_check_password_try_again" msgid="2643230209986217827">"پاسورڈ چیک کر کے دوبارہ کوشش کریں"</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>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="6552198761671428871">"رسائی پوائنٹ عارضی طور پر فُل ہے"</string>
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"ادنٰی معیار"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"کوئی نہیں"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"میعاد ختم ہو گئی"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"سائن اپ کے لیے تھپتھپائیں"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"سائن اپ مکمل ہو رہا ہے…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"سائن اپ مکمل نہیں ہو سکا۔ دوبارہ کوشش کرنے کے لیے تھپتھپائیں۔"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"سائن اپ مکمل ہو گیا۔ منسلک ہو رہا ہے…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"‏اس نیٹ ورک کو ایک منفرد ID موصول ہوتی ہے جو آلہ کے مقام کو ٹریک کرنے کیلئے استعمال ہو سکتی ہے۔ "<annotation id="url">"مزید جانیں"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"‏اس نیٹ ورک کو ایک SIM 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>
diff --git a/libs/WifiTrackerLib/res/values-uz/strings.xml b/libs/WifiTrackerLib/res/values-uz/strings.xml
index c2a17db4b..f19791ea1 100644
--- a/libs/WifiTrackerLib/res/values-uz/strings.xml
+++ b/libs/WifiTrackerLib/res/values-uz/strings.xml
@@ -27,7 +27,7 @@
<string name="wifi_disabled_generic" msgid="8307050327779256414">"Yoqilmagan"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="6552198761671428871">"Internet kirish nuqtasi vaqtinchalik to‘lgan"</string>
<string name="wifi_disconnected" msgid="3720926757662831062">"Ulanmagan"</string>
- <string name="wifi_remembered" msgid="5126903736498678708">"Saqlandi"</string>
+ <string name="wifi_remembered" msgid="5126903736498678708">"Saqlangan"</string>
<string name="wifi_metered_label" msgid="1362621600006544014">"Trafik hisoblanadigan tarmoq"</string>
<string name="wifi_unmetered_label" msgid="499466875639448350">"Trafik hisobi yuritilmaydigan tarmoq"</string>
<string name="connected_via_app" msgid="1818040967936972127">"<xliff:g id="NAME">%1$s</xliff:g> orqali ulandi"</string>
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Cheklangan aloqa"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Xususiy DNS server ishlamayapti"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Internetga ulanmagansiz"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Sifati past"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Hech qanday"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Muddati tugagan"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Registratsiya qilish uchun bosing"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Registratsiya tamomlanmoqda…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Registratsiya tamomlanmadi. Qayta urinish uchun tegining."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Registratsiya qilindi. Ulanmoqda…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Bu tarmoqqa qurilma joylashuvini aniqlash imkonini beruvchi maxsus identifikator beriladi. "<annotation id="url">"Batafsil"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Bu tarmoqqa qurilma joylashuvini aniqlash imkonini beruvchi SIM identifikator beriladi. "<annotation id="url">"Batafsil"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Juda sekin"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Sekin"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-vi/strings.xml b/libs/WifiTrackerLib/res/values-vi/strings.xml
index 18f769322..90a0a1038 100644
--- a/libs/WifiTrackerLib/res/values-vi/strings.xml
+++ b/libs/WifiTrackerLib/res/values-vi/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Kết nối giới hạn"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Không thể truy cập máy chủ DNS riêng tư"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Không có Internet"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Chất lượng thấp"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Không"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Đã hết hạn"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Nhấn để đăng ký"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Đang hoàn tất việc đăng ký…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Không thể hoàn tất việc đăng ký. Hãy nhấn để thử lại."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Đã đăng ký xong. Đang kết nối…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Mạng này nhận được một mã nhận dạng duy nhất có thể dùng để theo dõi vị trí của thiết bị. "<annotation id="url">"Tìm hiểu thêm"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Mạng này nhận được một mã nhận dạng SIM có thể dùng để theo dõi vị trí của thiết bị. "<annotation id="url">"Tìm hiểu thêm"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Rất chậm"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Chậm"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"Khá tốt"</string>
diff --git a/libs/WifiTrackerLib/res/values-zh-rCN/strings.xml b/libs/WifiTrackerLib/res/values-zh-rCN/strings.xml
index 2011a150a..f3bf193b5 100644
--- a/libs/WifiTrackerLib/res/values-zh-rCN/strings.xml
+++ b/libs/WifiTrackerLib/res/values-zh-rCN/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"质量不佳"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"无"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"已失效"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"点按即可注册"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"正在完成注册…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"无法完成注册。点按即可重试。"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"注册完毕。正在连接…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"此网络会收到可用于跟踪设备位置的唯一 ID。"<annotation id="url">"了解详情"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"此网络会收到可用于跟踪设备位置的 SIM 卡 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>
diff --git a/libs/WifiTrackerLib/res/values-zh-rHK/strings.xml b/libs/WifiTrackerLib/res/values-zh-rHK/strings.xml
index eb8007ddc..e0639708b 100644
--- a/libs/WifiTrackerLib/res/values-zh-rHK/strings.xml
+++ b/libs/WifiTrackerLib/res/values-zh-rHK/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"品質欠佳"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"無"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"已過期"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"輕按即可登入"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"正在完成申請…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"無法完成申請。輕按即可重試。"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"已完成申請。連接中…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"此網絡會接收可用於追蹤裝置位置的獨特 ID。"<annotation id="url">"瞭解詳情"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"此網絡會接收可用於追蹤裝置位置的 SIM 卡 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>
diff --git a/libs/WifiTrackerLib/res/values-zh-rTW/strings.xml b/libs/WifiTrackerLib/res/values-zh-rTW/strings.xml
index d5721fe23..35f21eb5c 100644
--- a/libs/WifiTrackerLib/res/values-zh-rTW/strings.xml
+++ b/libs/WifiTrackerLib/res/values-zh-rTW/strings.xml
@@ -37,6 +37,7 @@
<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>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"品質不佳"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"無"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"已失效"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"輕觸即可註冊"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"正在完成註冊程序…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"無法完成註冊程序。輕觸即可重試。"</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"註冊完成。連線中…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"這個網路會收到可用於追蹤裝置位置的唯一 ID。"<annotation id="url">"瞭解詳情"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"這個網路會收到可用於追蹤裝置位置的 SIM 卡 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>
diff --git a/libs/WifiTrackerLib/res/values-zu/strings.xml b/libs/WifiTrackerLib/res/values-zu/strings.xml
index 9a56c409f..b0a54ced0 100644
--- a/libs/WifiTrackerLib/res/values-zu/strings.xml
+++ b/libs/WifiTrackerLib/res/values-zu/strings.xml
@@ -37,6 +37,7 @@
<string name="wifi_limited_connection" msgid="3646701342701276239">"Iqoqo elikhawulelwe"</string>
<string name="private_dns_broken" msgid="2212227512243587416">"Iseva eyimfihlo ye-DNS ayikwazi ukufinyelelwa"</string>
<string name="wifi_connected_no_internet" msgid="7273909077465731259">"Ayikho i-inthanethi"</string>
+ <string name="wifi_connected_low_quality" msgid="4478331645458058445">"Ikhwalithi ephansi"</string>
<string name="wifi_security_none" msgid="6680263031386719053">"Lutho"</string>
<string name="wifi_passpoint_expired" msgid="3257021415099577815">"Iphelelwe isikhathi"</string>
<string name="tap_to_sign_up" msgid="2409214576606918295">"Thepha ukuze ubhalisele"</string>
@@ -46,7 +47,7 @@
<string name="osu_completing_sign_up" msgid="7188493241442946231">"Iqedela ukubhalisa…"</string>
<string name="osu_sign_up_failed" msgid="2725057866968590279">"Ayikwazanga ukuqedelela ukubhalisa. Thepha ukuze uzame futhi."</string>
<string name="osu_sign_up_complete" msgid="7013805426618985953">"Ukubhalisa kuqediwe. Iyaxhuma…"</string>
- <string name="imsi_protection_warning" msgid="3207104049473134195">"Le nethiwekhi ithola i-ID ehlukile engasetshenziselwa ukulandelela indawo yedivayisi. "<annotation id="url">"Funda kabanzi"</annotation></string>
+ <string name="imsi_protection_warning" msgid="5231726821588271569">"Le nethiwekhi ithola i-SIM ID engasetshenziselwa ukulandelela indawo yedivayisi. "<annotation id="url">"Funda kabanzi"</annotation></string>
<string name="speed_label_very_slow" msgid="2401582671941367179">"Phansi kakhulu"</string>
<string name="speed_label_slow" msgid="8410385703344502127">"Phansi"</string>
<string name="speed_label_okay" msgid="3741857805086997968">"KULUNGILE"</string>
diff --git a/libs/WifiTrackerLib/res/values/strings.xml b/libs/WifiTrackerLib/res/values/strings.xml
index c238f663c..c47e28939 100644
--- a/libs/WifiTrackerLib/res/values/strings.xml
+++ b/libs/WifiTrackerLib/res/values/strings.xml
@@ -85,6 +85,9 @@
<!-- Summary for Connected wifi network without internet [CHAR LIMIT=NONE] -->
<string name="wifi_connected_no_internet">No internet</string>
+ <!-- Summary for Connected wifi network with a low quality connection [CHAR LIMIT=NONE] -->
+ <string name="wifi_connected_low_quality">Low quality</string>
+
<!-- Do not translate. Concise terminology for wifi with 802.1x EAP security -->
<string name="wifi_security_short_eap" translatable="false">802.1x</string>
@@ -170,7 +173,7 @@
<string name="osu_sign_up_complete">Sign-up complete. Connecting\u2026</string>
<!-- IMSI protection warning for non-protection network [CHAR LIMIT=NONE] -->
- <string name="imsi_protection_warning">This network receives a unique ID that can be used to track device location. <annotation id="url">Learn more</annotation></string>
+ <string name="imsi_protection_warning">This network receives a SIM ID that can be used to track device location. <annotation id="url">Learn more</annotation></string>
<!-- Help URL, IMSI protection [DO NOT TRANSLATE] -->
<string name="help_url_imsi_protection" translatable="false"></string>
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
index 18611e242..8eaef6e5a 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
@@ -16,6 +16,8 @@
package com.android.wifitrackerlib;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
+import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static java.util.stream.Collectors.toList;
@@ -133,6 +135,9 @@ public class BaseWifiTracker implements LifecycleObserver {
protected final long mScanIntervalMillis;
protected final ScanResultUpdater mScanResultUpdater;
protected final WifiNetworkScoreCache mWifiNetworkScoreCache;
+ protected boolean mIsWifiValidated;
+ protected boolean mIsWifiDefaultRoute;
+ protected boolean mIsCellDefaultRoute;
private final Set<NetworkKey> mRequestedScoreKeys = new HashSet<>();
// Network request for listening on changes to Wifi link properties and network capabilities
@@ -143,15 +148,56 @@ public class BaseWifiTracker implements LifecycleObserver {
private final ConnectivityManager.NetworkCallback mNetworkCallback =
new ConnectivityManager.NetworkCallback() {
@Override
- public void onLinkPropertiesChanged(Network network, LinkProperties lp) {
+ public void onLinkPropertiesChanged(@NonNull Network network,
+ @NonNull LinkProperties lp) {
handleLinkPropertiesChanged(lp);
}
@Override
- public void onCapabilitiesChanged(Network network,
- NetworkCapabilities networkCapabilities) {
+ public void onCapabilitiesChanged(@NonNull Network network,
+ @NonNull NetworkCapabilities networkCapabilities) {
+ final boolean oldWifiValidated = mIsWifiValidated;
+ mIsWifiValidated = networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED);
+ if (isVerboseLoggingEnabled() && mIsWifiValidated != oldWifiValidated) {
+ Log.v(mTag, "Is Wifi validated: " + mIsWifiValidated);
+ }
handleNetworkCapabilitiesChanged(networkCapabilities);
}
+
+ @Override
+ public void onLost(@NonNull Network network) {
+ mIsWifiValidated = false;
+ }
+ };
+
+ private final ConnectivityManager.NetworkCallback mDefaultNetworkCallback =
+ new ConnectivityManager.NetworkCallback() {
+ @Override
+ public void onCapabilitiesChanged(@NonNull Network network,
+ @NonNull NetworkCapabilities networkCapabilities) {
+ final boolean oldWifiDefault = mIsWifiDefaultRoute;
+ final boolean oldCellDefault = mIsCellDefaultRoute;
+ mIsWifiDefaultRoute = networkCapabilities.hasTransport(TRANSPORT_WIFI);
+ mIsCellDefaultRoute = networkCapabilities.hasTransport(TRANSPORT_CELLULAR);
+ if (mIsWifiDefaultRoute != oldWifiDefault
+ || mIsCellDefaultRoute != oldCellDefault) {
+ if (isVerboseLoggingEnabled()) {
+ Log.v(mTag, "Wifi is the default route: " + mIsWifiDefaultRoute);
+ Log.v(mTag, "Cell is the default route: " + mIsCellDefaultRoute);
+ }
+ handleDefaultRouteChanged();
+ }
+ }
+
+ public void onLost(@NonNull Network network) {
+ mIsWifiDefaultRoute = false;
+ mIsCellDefaultRoute = false;
+ if (isVerboseLoggingEnabled()) {
+ Log.v(mTag, "Wifi is the default route: false");
+ Log.v(mTag, "Cell is the default route: false");
+ }
+ handleDefaultRouteChanged();
+ }
};
/**
@@ -220,6 +266,22 @@ public class BaseWifiTracker implements LifecycleObserver {
/* broadcastPermission */ null, mWorkerHandler);
mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback,
mWorkerHandler);
+ mConnectivityManager.registerDefaultNetworkCallback(mDefaultNetworkCallback,
+ mWorkerHandler);
+ final NetworkCapabilities defaultNetworkCapabilities = mConnectivityManager
+ .getNetworkCapabilities(mConnectivityManager.getActiveNetwork());
+ if (defaultNetworkCapabilities != null) {
+ mIsWifiDefaultRoute = defaultNetworkCapabilities.hasTransport(TRANSPORT_WIFI);
+ mIsCellDefaultRoute = defaultNetworkCapabilities.hasTransport(TRANSPORT_CELLULAR);
+ } else {
+ mIsWifiDefaultRoute = false;
+ mIsCellDefaultRoute = false;
+ }
+ if (isVerboseLoggingEnabled()) {
+ Log.v(mTag, "Wifi is the default route: " + mIsWifiDefaultRoute);
+ Log.v(mTag, "Cell is the default route: " + mIsCellDefaultRoute);
+ }
+
mNetworkScoreManager.registerNetworkScoreCache(
NetworkKey.TYPE_WIFI,
mWifiNetworkScoreCache,
@@ -241,6 +303,7 @@ public class BaseWifiTracker implements LifecycleObserver {
mWorkerHandler.post(mScanner::stop);
mContext.unregisterReceiver(mBroadcastReceiver);
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
+ mConnectivityManager.unregisterNetworkCallback(mDefaultNetworkCallback);
mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI,
mWifiNetworkScoreCache);
mWorkerHandler.post(mRequestedScoreKeys::clear);
@@ -326,6 +389,15 @@ public class BaseWifiTracker implements LifecycleObserver {
}
/**
+ * Handle when the default route changes. Whether Wifi is the default route is stored in
+ * mIsWifiDefaultRoute.
+ */
+ @WorkerThread
+ protected void handleDefaultRouteChanged() {
+ // Do nothing.
+ }
+
+ /**
* Handle updates to the Wifi network score cache, which is stored in mWifiNetworkScoreCache
*/
@WorkerThread
@@ -393,8 +465,7 @@ public class BaseWifiTracker implements LifecycleObserver {
*/
protected interface BaseWifiTrackerCallback {
/**
- * Called when the state of Wi-Fi has changed. The new value can be read through
- * {@link #getWifiState()}
+ * Called when the value for {@link #getWifiState() has changed.
*/
@MainThread
void onWifiStateChanged();
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java
index 91805f776..be50679e2 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java
@@ -16,14 +16,24 @@
package com.android.wifitrackerlib;
+import static androidx.core.util.Preconditions.checkNotNull;
+
+import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_CONNECTED;
+
import android.content.Context;
+import android.content.Intent;
import android.net.ConnectivityManager;
+import android.net.LinkProperties;
+import android.net.NetworkCapabilities;
+import android.net.NetworkInfo;
import android.net.NetworkScoreManager;
import android.net.wifi.WifiManager;
import android.os.Handler;
import androidx.annotation.AnyThread;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.WorkerThread;
import androidx.lifecycle.Lifecycle;
import java.time.Clock;
@@ -75,6 +85,8 @@ public abstract class NetworkDetailsTracker extends BaseWifiTracker {
}
}
+ protected NetworkInfo mCurrentNetworkInfo;
+
/**
* Abstract constructor for NetworkDetailsTracker.
* Clients must use {@link NetworkDetailsTracker#createNetworkDetailsTracker} for creating
@@ -95,6 +107,49 @@ public abstract class NetworkDetailsTracker extends BaseWifiTracker {
null /* listener */, tag);
}
+ @WorkerThread
+ @Override
+ protected void handleNetworkStateChangedAction(@NonNull Intent intent) {
+ checkNotNull(intent, "Intent cannot be null!");
+ mCurrentNetworkInfo = (NetworkInfo) intent.getExtra(WifiManager.EXTRA_NETWORK_INFO);
+ getWifiEntry().updateConnectionInfo(mWifiManager.getConnectionInfo(), mCurrentNetworkInfo);
+ }
+
+ @WorkerThread
+ @Override
+ protected void handleRssiChangedAction() {
+ getWifiEntry().updateConnectionInfo(mWifiManager.getConnectionInfo(), mCurrentNetworkInfo);
+ }
+
+ @WorkerThread
+ @Override
+ protected void handleLinkPropertiesChanged(@Nullable LinkProperties linkProperties) {
+ final WifiEntry chosenEntry = getWifiEntry();
+ if (chosenEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) {
+ chosenEntry.updateLinkProperties(linkProperties);
+ }
+ }
+
+ @WorkerThread
+ @Override
+ protected void handleNetworkCapabilitiesChanged(@Nullable NetworkCapabilities capabilities) {
+ final WifiEntry chosenEntry = getWifiEntry();
+ if (chosenEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) {
+ chosenEntry.updateNetworkCapabilities(capabilities);
+ chosenEntry.setIsLowQuality(mIsWifiValidated && mIsCellDefaultRoute);
+ }
+ }
+
+ @WorkerThread
+ @Override
+ protected void handleDefaultRouteChanged() {
+ final WifiEntry chosenEntry = getWifiEntry();
+ if (chosenEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) {
+ chosenEntry.setIsDefaultNetwork(mIsWifiDefaultRoute);
+ chosenEntry.setIsLowQuality(mIsWifiValidated && mIsCellDefaultRoute);
+ }
+ }
+
/**
* Returns the WifiEntry object representing the single network being tracked.
*/
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java
index 134ceef96..b1d7d4ae1 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java
@@ -24,6 +24,7 @@ import static com.android.wifitrackerlib.WifiEntry.ConnectCallback.CONNECT_STATU
import android.annotation.MainThread;
import android.content.Context;
import android.net.NetworkInfo;
+import android.net.Uri;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
@@ -60,11 +61,12 @@ class OsuWifiEntry extends WifiEntry {
@NonNull private final String mKey;
@NonNull private final Context mContext;
@NonNull private OsuProvider mOsuProvider;
+ private String mSsid;
private String mOsuStatusString;
private boolean mIsAlreadyProvisioned = false;
/**
- * Create n OsuWifiEntry with the associated OsuProvider
+ * Create an OsuWifiEntry with the associated OsuProvider
*/
OsuWifiEntry(@NonNull Context context, @NonNull Handler callbackHandler,
@NonNull OsuProvider osuProvider,
@@ -87,7 +89,18 @@ class OsuWifiEntry extends WifiEntry {
@Override
public String getTitle() {
- return mOsuProvider.getFriendlyName();
+ final String friendlyName = mOsuProvider.getFriendlyName();
+ if (!TextUtils.isEmpty(friendlyName)) {
+ return friendlyName;
+ }
+ if (!TextUtils.isEmpty(mSsid)) {
+ return mSsid;
+ }
+ final Uri serverUri = mOsuProvider.getServerUri();
+ if (serverUri != null) {
+ return serverUri.toString();
+ }
+ return "";
}
@Override
@@ -105,8 +118,7 @@ class OsuWifiEntry extends WifiEntry {
@Override
public String getSsid() {
- // TODO(b/70983952): Fill this method in in case we need the SSID for verbose logging
- return "";
+ return mSsid;
}
@Override
@@ -267,10 +279,13 @@ class OsuWifiEntry extends WifiEntry {
}
final ScanResult bestScanResult = getBestScanResultByLevel(scanResults);
- if (getConnectedState() == CONNECTED_STATE_DISCONNECTED) {
- mLevel = bestScanResult != null
- ? mWifiManager.calculateSignalLevel(bestScanResult.level)
- : WIFI_LEVEL_UNREACHABLE;
+ if (bestScanResult != null) {
+ mSsid = bestScanResult.SSID;
+ if (getConnectedState() == CONNECTED_STATE_DISCONNECTED) {
+ mLevel = mWifiManager.calculateSignalLevel(bestScanResult.level);
+ }
+ } else {
+ mLevel = WIFI_LEVEL_UNREACHABLE;
}
notifyOnUpdated();
}
@@ -336,7 +351,7 @@ class OsuWifiEntry extends WifiEntry {
case OSU_STATUS_WAITING_FOR_REDIRECT_RESPONSE:
newStatusString = String.format(mContext.getString(
R.string.osu_opening_provider),
- mOsuProvider.getFriendlyName());
+ getTitle());
break;
case OSU_STATUS_REDIRECT_RESPONSE_RECEIVED:
case OSU_STATUS_SECOND_SOAP_EXCHANGE:
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java
index e2d7acc8e..e4efcb997 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java
@@ -19,13 +19,11 @@ package com.android.wifitrackerlib;
import static androidx.core.util.Preconditions.checkNotNull;
import static com.android.wifitrackerlib.PasspointWifiEntry.uniqueIdToPasspointWifiEntryKey;
-import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_CONNECTED;
import static com.android.wifitrackerlib.WifiEntry.WIFI_LEVEL_UNREACHABLE;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
-import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkInfo;
import android.net.NetworkScoreManager;
@@ -45,7 +43,6 @@ import androidx.annotation.WorkerThread;
import androidx.lifecycle.Lifecycle;
import java.time.Clock;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -59,6 +56,7 @@ class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
private final PasspointWifiEntry mChosenEntry;
private OsuWifiEntry mOsuWifiEntry;
private NetworkInfo mCurrentNetworkInfo;
+ private WifiConfiguration mCurrentWifiConfig;
PasspointNetworkDetailsTracker(@NonNull Lifecycle lifecycle,
@NonNull Context context,
@@ -101,16 +99,6 @@ class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
"Cannot find config for given PasspointWifiEntry key!");
}
}
-
- cacheNewScanResults();
- conditionallyUpdateScanResults(true /* lastScanSucceeded */);
- conditionallyUpdateConfig();
- final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
- final Network currentNetwork = mWifiManager.getCurrentNetwork();
- mCurrentNetworkInfo = mConnectivityManager.getNetworkInfo(currentNetwork);
- mChosenEntry.updateConnectionInfo(wifiInfo, mCurrentNetworkInfo);
- handleLinkPropertiesChanged(mConnectivityManager.getLinkProperties(
- mWifiManager.getCurrentNetwork()));
}
@AnyThread
@@ -122,6 +110,22 @@ class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
@WorkerThread
@Override
+ protected void handleOnStart() {
+ conditionallyUpdateScanResults(true /* lastScanSucceeded */);
+ conditionallyUpdateConfig();
+ final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
+ final Network currentNetwork = mWifiManager.getCurrentNetwork();
+ mCurrentNetworkInfo = mConnectivityManager.getNetworkInfo(currentNetwork);
+ mChosenEntry.updateConnectionInfo(wifiInfo, mCurrentNetworkInfo);
+ handleNetworkCapabilitiesChanged(
+ mConnectivityManager.getNetworkCapabilities(currentNetwork));
+ handleLinkPropertiesChanged(mConnectivityManager.getLinkProperties(currentNetwork));
+ mChosenEntry.setIsDefaultNetwork(mIsWifiDefaultRoute);
+ mChosenEntry.setIsLowQuality(mIsWifiValidated && mIsCellDefaultRoute);
+ }
+
+ @WorkerThread
+ @Override
protected void handleWifiStateChangedAction() {
conditionallyUpdateScanResults(true /* lastScanSucceeded */);
}
@@ -142,34 +146,6 @@ class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
}
@WorkerThread
- @Override
- protected void handleRssiChangedAction() {
- mChosenEntry.updateConnectionInfo(mWifiManager.getConnectionInfo(), mCurrentNetworkInfo);
- }
-
- @WorkerThread
- @Override
- protected void handleNetworkStateChangedAction(@NonNull Intent intent) {
- checkNotNull(intent, "Intent cannot be null!");
- mCurrentNetworkInfo = (NetworkInfo) intent.getExtra(WifiManager.EXTRA_NETWORK_INFO);
- mChosenEntry.updateConnectionInfo(mWifiManager.getConnectionInfo(), mCurrentNetworkInfo);
- }
-
- @WorkerThread
- @Override
- protected void handleLinkPropertiesChanged(@NonNull LinkProperties linkProperties) {
- if (mChosenEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) {
- mChosenEntry.updateLinkProperties(linkProperties);
- }
- }
-
- @WorkerThread
- @Override
- protected void handleNetworkScoreCacheUpdated() {
- mChosenEntry.onScoreCacheUpdated();
- }
-
- @WorkerThread
private void updatePasspointWifiEntryScans(@NonNull List<ScanResult> scanResults) {
checkNotNull(scanResults, "Scan Result list should not be null!");
@@ -180,14 +156,16 @@ class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
final String key = uniqueIdToPasspointWifiEntryKey(wifiConfig.getKey());
if (TextUtils.equals(key, mChosenEntry.getKey())) {
- mChosenEntry.updateScanResultInfo(wifiConfig,
+ mCurrentWifiConfig = wifiConfig;
+ mChosenEntry.updateScanResultInfo(mCurrentWifiConfig,
pair.second.get(WifiManager.PASSPOINT_HOME_NETWORK),
pair.second.get(WifiManager.PASSPOINT_ROAMING_NETWORK));
return;
}
}
- // No AP in range; set scan results and connection config to null.
- mChosenEntry.updateScanResultInfo(null /* wifiConfig */,
+ // No AP in range; set scan results to null but keep the last seen WifiConfig to display
+ // the previous information while out of range.
+ mChosenEntry.updateScanResultInfo(mCurrentWifiConfig,
null /* homeScanResults */,
null /* roamingScanResults */);
}
@@ -235,8 +213,9 @@ class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
*/
private void conditionallyUpdateScanResults(boolean lastScanSucceeded) {
if (mWifiManager.getWifiState() == WifiManager.WIFI_STATE_DISABLED) {
- mChosenEntry.updateScanResultInfo(null /* wifiConfig */,
- Collections.emptyList(), Collections.emptyList());
+ mChosenEntry.updateScanResultInfo(mCurrentWifiConfig,
+ null /* homeScanResults */,
+ null /* roamingScanResults */);
return;
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java
index d873c25e5..1f0a34be7 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java
@@ -16,6 +16,7 @@
package com.android.wifitrackerlib;
+import static android.net.wifi.WifiInfo.DEFAULT_MAC_ADDRESS;
import static android.net.wifi.WifiInfo.sanitizeSsid;
import static androidx.core.util.Preconditions.checkNotNull;
@@ -244,6 +245,11 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
? carrierName
: suggestorLabel);
}
+
+ if (mIsLowQuality) {
+ return mContext.getString(R.string.wifi_connected_low_quality);
+ }
+
String networkCapabilitiesinformation =
getCurrentNetworkCapabilitiesInformation(mContext, mNetworkCapabilities);
if (!TextUtils.isEmpty(networkCapabilitiesinformation)) {
@@ -277,16 +283,21 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
@Override
public String getMacAddress() {
+ if (mWifiInfo != null) {
+ final String wifiInfoMac = mWifiInfo.getMacAddress();
+ if (!TextUtils.isEmpty(wifiInfoMac)
+ && !TextUtils.equals(wifiInfoMac, DEFAULT_MAC_ADDRESS)) {
+ return wifiInfoMac;
+ }
+ }
if (mWifiConfig == null || getPrivacy() != PRIVACY_RANDOMIZED_MAC) {
final String[] factoryMacs = mWifiManager.getFactoryMacAddresses();
if (factoryMacs.length > 0) {
return factoryMacs[0];
- } else {
- return null;
}
- } else {
- return mWifiConfig.getRandomizedMacAddress().toString();
+ return null;
}
+ return mWifiConfig.getRandomizedMacAddress().toString();
}
@Override
@@ -470,26 +481,27 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
@Override
public boolean isAutoJoinEnabled() {
// Suggestion network; use WifiConfig instead
- if (mPasspointConfig == null && mWifiConfig != null) {
+ if (mPasspointConfig != null) {
+ return mPasspointConfig.isAutojoinEnabled();
+ }
+ if (mWifiConfig != null) {
return mWifiConfig.allowAutojoin;
}
-
- return mPasspointConfig.isAutojoinEnabled();
+ return false;
}
@Override
public boolean canSetAutoJoinEnabled() {
- return true;
+ return mPasspointConfig != null || mWifiConfig != null;
}
@Override
public void setAutoJoinEnabled(boolean enabled) {
- if (mPasspointConfig == null && mWifiConfig != null) {
+ if (mPasspointConfig != null) {
+ mWifiManager.allowAutojoinPasspoint(mPasspointConfig.getHomeSp().getFqdn(), enabled);
+ } else if (mWifiConfig != null) {
mWifiManager.allowAutojoin(mWifiConfig.networkId, enabled);
- return;
}
-
- mWifiManager.allowAutojoinPasspoint(mPasspointConfig.getHomeSp().getFqdn(), enabled);
}
@Override
@@ -614,7 +626,9 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
/** Pass a reference to a matching OsuWifiEntry for expiration handling */
void setOsuWifiEntry(OsuWifiEntry osuWifiEntry) {
mOsuWifiEntry = osuWifiEntry;
- mOsuWifiEntry.setListener(this);
+ if (mOsuWifiEntry != null) {
+ mOsuWifiEntry.setListener(this);
+ }
}
/** Callback for updates to the linked OsuWifiEntry */
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java
index 3ef1b4727..356af410c 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java
@@ -21,16 +21,13 @@ import static androidx.core.util.Preconditions.checkNotNull;
import static com.android.wifitrackerlib.NetworkRequestEntry.wifiConfigToNetworkRequestEntryKey;
import static com.android.wifitrackerlib.StandardWifiEntry.wifiConfigToStandardWifiEntryKey;
import static com.android.wifitrackerlib.Utils.getSecurityTypesFromScanResult;
-import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_CONNECTED;
import static java.util.stream.Collectors.toList;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
-import android.net.LinkProperties;
import android.net.Network;
-import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkScoreManager;
import android.net.wifi.WifiConfiguration;
@@ -41,7 +38,6 @@ import android.text.TextUtils;
import androidx.annotation.AnyThread;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread;
import androidx.lifecycle.Lifecycle;
@@ -81,14 +77,6 @@ class StandardNetworkDetailsTracker extends NetworkDetailsTracker {
mChosenEntry = new StandardWifiEntry(mContext, mMainHandler, key, mWifiManager,
mWifiNetworkScoreCache, false /* forSavedNetworksPage */);
}
- cacheNewScanResults();
- conditionallyUpdateScanResults(true /* lastScanSucceeded */);
- conditionallyUpdateConfig();
- final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
- final Network currentNetwork = mWifiManager.getCurrentNetwork();
- mCurrentNetworkInfo = mConnectivityManager.getNetworkInfo(currentNetwork);
- mChosenEntry.updateConnectionInfo(wifiInfo, mCurrentNetworkInfo);
- handleLinkPropertiesChanged(mConnectivityManager.getLinkProperties(currentNetwork));
}
@AnyThread
@@ -100,6 +88,22 @@ class StandardNetworkDetailsTracker extends NetworkDetailsTracker {
@WorkerThread
@Override
+ protected void handleOnStart() {
+ conditionallyUpdateScanResults(true /* lastScanSucceeded */);
+ conditionallyUpdateConfig();
+ final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
+ final Network currentNetwork = mWifiManager.getCurrentNetwork();
+ mCurrentNetworkInfo = mConnectivityManager.getNetworkInfo(currentNetwork);
+ mChosenEntry.updateConnectionInfo(wifiInfo, mCurrentNetworkInfo);
+ handleNetworkCapabilitiesChanged(
+ mConnectivityManager.getNetworkCapabilities(currentNetwork));
+ handleLinkPropertiesChanged(mConnectivityManager.getLinkProperties(currentNetwork));
+ mChosenEntry.setIsDefaultNetwork(mIsWifiDefaultRoute);
+ mChosenEntry.setIsLowQuality(mIsWifiValidated && mIsCellDefaultRoute);
+ }
+
+ @WorkerThread
+ @Override
protected void handleWifiStateChangedAction() {
conditionallyUpdateScanResults(true /* lastScanSucceeded */);
}
@@ -134,36 +138,6 @@ class StandardNetworkDetailsTracker extends NetworkDetailsTracker {
@WorkerThread
@Override
- protected void handleNetworkStateChangedAction(@NonNull Intent intent) {
- checkNotNull(intent, "Intent cannot be null!");
- mCurrentNetworkInfo = (NetworkInfo) intent.getExtra(WifiManager.EXTRA_NETWORK_INFO);
- mChosenEntry.updateConnectionInfo(mWifiManager.getConnectionInfo(), mCurrentNetworkInfo);
- }
-
- @WorkerThread
- @Override
- protected void handleRssiChangedAction() {
- mChosenEntry.updateConnectionInfo(mWifiManager.getConnectionInfo(), mCurrentNetworkInfo);
- }
-
- @WorkerThread
- @Override
- protected void handleLinkPropertiesChanged(@Nullable LinkProperties linkProperties) {
- if (mChosenEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) {
- mChosenEntry.updateLinkProperties(linkProperties);
- }
- }
-
- @WorkerThread
- @Override
- protected void handleNetworkCapabilitiesChanged(@Nullable NetworkCapabilities capabilities) {
- if (mChosenEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) {
- mChosenEntry.updateNetworkCapabilities(capabilities);
- }
- }
-
- @WorkerThread
- @Override
protected void handleNetworkScoreCacheUpdated() {
mChosenEntry.onScoreCacheUpdated();
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
index 19c2619bc..51270545b 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
@@ -20,6 +20,7 @@ import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.DISABLED
import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.DISABLED_AUTHENTICATION_NO_CREDENTIALS;
import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.DISABLED_BY_WRONG_PASSWORD;
import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLED;
+import static android.net.wifi.WifiInfo.DEFAULT_MAC_ADDRESS;
import static android.net.wifi.WifiInfo.sanitizeSsid;
import static androidx.core.util.Preconditions.checkNotNull;
@@ -54,6 +55,9 @@ import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkScoreCache;
import android.os.Handler;
import android.os.SystemClock;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import android.text.TextUtils;
import androidx.annotation.GuardedBy;
@@ -280,8 +284,12 @@ public class StandardWifiEntry extends WifiEntry {
return mContext.getString(R.string.connected_via_network_scorer_default);
}
+ if (mIsLowQuality) {
+ return mContext.getString(R.string.wifi_connected_low_quality);
+ }
+
String networkCapabilitiesinformation =
- getCurrentNetworkCapabilitiesInformation(mContext, mNetworkCapabilities);
+ getCurrentNetworkCapabilitiesInformation(mContext, mNetworkCapabilities);
if (!TextUtils.isEmpty(networkCapabilitiesinformation)) {
return networkCapabilitiesinformation;
}
@@ -309,16 +317,21 @@ public class StandardWifiEntry extends WifiEntry {
@Override
public String getMacAddress() {
+ if (mWifiInfo != null) {
+ final String wifiInfoMac = mWifiInfo.getMacAddress();
+ if (!TextUtils.isEmpty(wifiInfoMac)
+ && !TextUtils.equals(wifiInfoMac, DEFAULT_MAC_ADDRESS)) {
+ return wifiInfoMac;
+ }
+ }
if (mWifiConfig == null || getPrivacy() != PRIVACY_RANDOMIZED_MAC) {
final String[] factoryMacs = mWifiManager.getFactoryMacAddresses();
if (factoryMacs.length > 0) {
return factoryMacs[0];
- } else {
- return null;
}
- } else {
- return mWifiConfig.getRandomizedMacAddress().toString();
+ return null;
}
+ return mWifiConfig.getRandomizedMacAddress().toString();
}
@Override
@@ -357,8 +370,35 @@ public class StandardWifiEntry extends WifiEntry {
@Override
public boolean canConnect() {
- return mLevel != WIFI_LEVEL_UNREACHABLE
- && getConnectedState() == CONNECTED_STATE_DISCONNECTED;
+ if (mLevel == WIFI_LEVEL_UNREACHABLE
+ || getConnectedState() != CONNECTED_STATE_DISCONNECTED) {
+ return false;
+ }
+ // Allow connection for EAP SIM dependent methods if the SIM of specified carrier ID is
+ // active in the device.
+ if (getSecurity() == SECURITY_EAP && mWifiConfig != null
+ && mWifiConfig.enterpriseConfig != null) {
+ if (!mWifiConfig.enterpriseConfig.isAuthenticationSimBased()) {
+ return true;
+ }
+ List<SubscriptionInfo> activeSubscriptionInfos = ((SubscriptionManager) mContext
+ .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE))
+ .getActiveSubscriptionInfoList();
+ if (activeSubscriptionInfos == null || activeSubscriptionInfos.size() == 0) {
+ return false;
+ }
+ if (mWifiConfig.carrierId == TelephonyManager.UNKNOWN_CARRIER_ID) {
+ // To connect via default subscription.
+ return true;
+ }
+ for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfos) {
+ if (subscriptionInfo.getCarrierId() == mWifiConfig.carrierId) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return true;
}
@Override
@@ -642,12 +682,6 @@ public class StandardWifiEntry extends WifiEntry {
return false;
}
- // The secured Wi-Fi entry is never connected.
- if (getSecurity() != SECURITY_NONE && getSecurity() != SECURITY_OWE
- && !wifiConfig.getNetworkSelectionStatus().hasEverConnected()) {
- return true;
- }
-
// The network is disabled because of one of the authentication problems.
NetworkSelectionStatus networkSelectionStatus = wifiConfig.getNetworkSelectionStatus();
if (networkSelectionStatus.getNetworkSelectionStatus() != NETWORK_SELECTION_ENABLED) {
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java
index 62bbe0f96..5a14ec4ba 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java
@@ -494,6 +494,11 @@ class Utils {
sj.add(wifiInfoDescription);
}
+ final String networkCapabilityDescription = wifiEntry.getNetworkCapabilityDescription();
+ if (!TextUtils.isEmpty(networkCapabilityDescription)) {
+ sj.add(networkCapabilityDescription);
+ }
+
final String scanResultsDescription = wifiEntry.getScanResultDescription();
if (!TextUtils.isEmpty(scanResultsDescription)) {
sj.add(scanResultsDescription);
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
index c7dc5c4da..92c2ed531 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
@@ -28,6 +28,7 @@ import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkUtils;
import android.net.RouteInfo;
+import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
@@ -223,6 +224,10 @@ public abstract class WifiEntry implements Comparable<WifiEntry> {
protected boolean mCalledConnect = false;
protected boolean mCalledDisconnect = false;
+ private boolean mIsValidated;
+ private boolean mIsDefaultNetwork;
+ protected boolean mIsLowQuality;
+
WifiEntry(@NonNull Handler callbackHandler, @NonNull WifiManager wifiManager,
@NonNull WifiNetworkScoreCache scoreCache,
boolean forSavedNetworksPage) throws IllegalArgumentException {
@@ -289,6 +294,14 @@ public abstract class WifiEntry implements Comparable<WifiEntry> {
return mLevel;
};
+ /**
+ * Returns whether the level icon for this network should show an X or not.
+ */
+ public boolean shouldShowXLevelIcon() {
+ return getConnectedState() != CONNECTED_STATE_DISCONNECTED
+ && (!mIsValidated || !mIsDefaultNetwork) && !canSignIn();
+ }
+
/** Returns the speed value of the network defined by the SPEED constants */
@Speed
public int getSpeed() {
@@ -359,6 +372,7 @@ public abstract class WifiEntry implements Comparable<WifiEntry> {
public List<String> ipv6Addresses = new ArrayList<>();
public String gateway;
public String subnetMask;
+ public int wifiStandard = ScanResult.WIFI_STANDARD_UNKNOWN;
}
// User actions on a network
@@ -452,6 +466,20 @@ public abstract class WifiEntry implements Comparable<WifiEntry> {
return "";
}
+ /** Returns the network capability information of a WifiEntry */
+ String getNetworkCapabilityDescription() {
+ final StringBuilder sb = new StringBuilder();
+ if (getConnectedState() == CONNECTED_STATE_CONNECTED) {
+ sb.append("isValidated:")
+ .append(mIsValidated)
+ .append(", isDefaultNetwork:")
+ .append(mIsDefaultNetwork)
+ .append(", isLowQuality:")
+ .append(mIsLowQuality);
+ }
+ return sb.toString();
+ }
+
/**
* In Wi-Fi picker, when users click a saved network, it will connect to the Wi-Fi network.
* However, for some special cases, Wi-Fi picker should show Wi-Fi editor UI for users to edit
@@ -622,11 +650,15 @@ public abstract class WifiEntry implements Comparable<WifiEntry> {
}
mConnectedInfo.frequencyMhz = wifiInfo.getFrequency();
mConnectedInfo.linkSpeedMbps = wifiInfo.getLinkSpeed();
+ mConnectedInfo.wifiStandard = wifiInfo.getWifiStandard();
}
} else { // Connection info doesn't matched, so this network is disconnected
mNetworkInfo = null;
mNetworkCapabilities = null;
mConnectedInfo = null;
+ mIsValidated = false;
+ mIsDefaultNetwork = false;
+ mIsLowQuality = false;
if (mCalledDisconnect) {
mCalledDisconnect = false;
mCallbackHandler.post(() -> {
@@ -686,10 +718,27 @@ public abstract class WifiEntry implements Comparable<WifiEntry> {
notifyOnUpdated();
}
+ @WorkerThread
+ void setIsDefaultNetwork(boolean isDefaultNetwork) {
+ mIsDefaultNetwork = isDefaultNetwork;
+ notifyOnUpdated();
+ }
+
+ @WorkerThread
+ void setIsLowQuality(boolean isLowQuality) {
+ mIsLowQuality = isLowQuality;
+ }
+
// Method for WifiTracker to update a connected WifiEntry's network capabilities.
@WorkerThread
void updateNetworkCapabilities(@Nullable NetworkCapabilities capabilities) {
mNetworkCapabilities = capabilities;
+ if (mConnectedInfo == null) {
+ return;
+ }
+ mIsValidated = mNetworkCapabilities != null
+ && mNetworkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
+ notifyOnUpdated();
}
String getWifiInfoDescription() {
@@ -803,12 +852,17 @@ public abstract class WifiEntry implements Comparable<WifiEntry> {
.append(isSuggestion())
.append(",level:")
.append(getLevel())
+ .append(shouldShowXLevelIcon() ? "X" : "")
.append(",security:")
.append(getSecurity())
.append(",connected:")
.append(getConnectedState() == CONNECTED_STATE_CONNECTED ? "true" : "false")
.append(",connectedInfo:")
.append(getConnectedInfo())
+ .append(",isValidated:")
+ .append(mIsValidated)
+ .append(",isDefaultNetwork:")
+ .append(mIsDefaultNetwork)
.toString();
}
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
index bb3a2246a..eef865abe 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
@@ -195,10 +195,15 @@ public class WifiPickerTracker extends BaseWifiTracker {
final Network currentNetwork = mWifiManager.getCurrentNetwork();
mCurrentNetworkInfo = mConnectivityManager.getNetworkInfo(currentNetwork);
updateConnectionInfo(wifiInfo, mCurrentNetworkInfo);
- handleLinkPropertiesChanged(mConnectivityManager.getLinkProperties(currentNetwork));
notifyOnNumSavedNetworksChanged();
notifyOnNumSavedSubscriptionsChanged();
updateWifiEntries();
+
+ // Populate mConnectedWifiEntry with information from missed callbacks.
+ handleNetworkCapabilitiesChanged(
+ mConnectivityManager.getNetworkCapabilities(currentNetwork));
+ handleLinkPropertiesChanged(mConnectivityManager.getLinkProperties(currentNetwork));
+ handleDefaultRouteChanged();
}
@WorkerThread
@@ -276,6 +281,15 @@ public class WifiPickerTracker extends BaseWifiTracker {
if (mConnectedWifiEntry != null
&& mConnectedWifiEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) {
mConnectedWifiEntry.updateNetworkCapabilities(capabilities);
+ mConnectedWifiEntry.setIsLowQuality(mIsWifiValidated && mIsCellDefaultRoute);
+ }
+ }
+
+ @WorkerThread
+ protected void handleDefaultRouteChanged() {
+ if (mConnectedWifiEntry != null) {
+ mConnectedWifiEntry.setIsDefaultNetwork(mIsWifiDefaultRoute);
+ mConnectedWifiEntry.setIsLowQuality(mIsWifiValidated && mIsCellDefaultRoute);
}
}
@@ -491,7 +505,8 @@ public class WifiPickerTracker extends BaseWifiTracker {
// Remove entries that are now unreachable
mPasspointWifiEntryCache.entrySet()
.removeIf(entry -> entry.getValue().getLevel() == WIFI_LEVEL_UNREACHABLE
- || !seenKeys.contains(entry.getKey()));
+ || (!seenKeys.contains(entry.getKey()))
+ && entry.getValue().getConnectedState() == CONNECTED_STATE_DISCONNECTED);
}
@WorkerThread
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java
index 80a31e53f..aa96fb8c7 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java
@@ -30,6 +30,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.res.Resources;
import android.net.ConnectivityManager;
+import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkKey;
import android.net.ScoredNetwork;
@@ -147,7 +148,8 @@ public class PasspointWifiEntryTest {
ConnectivityManager mockConnectivityManager = mock(ConnectivityManager.class);
when(mMockContext.getSystemService(Context.CONNECTIVITY_SERVICE))
.thenReturn(mockConnectivityManager);
-
+ final NetworkCapabilities networkCapabilities = new NetworkCapabilities.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED).build();
WifiInfo wifiInfo = mock(WifiInfo.class);
when(wifiInfo.isPasspointAp()).thenReturn(true);
when(wifiInfo.getPasspointFqdn()).thenReturn(FQDN);
@@ -159,11 +161,55 @@ public class PasspointWifiEntryTest {
getPasspointConfiguration(), mMockWifiManager, mMockScoreCache,
false /* forSavedNetworksPage */);
entry.updateConnectionInfo(wifiInfo, networkInfo);
+ entry.updateNetworkCapabilities(networkCapabilities);
+ entry.setIsDefaultNetwork(true);
assertThat(entry.getSummary()).isEqualTo("Connected");
}
@Test
+ public void testShouldShowXLevelIcon_unvalidatedOrNotDefault_returnsTrue() {
+ ConnectivityManager mockConnectivityManager = mock(ConnectivityManager.class);
+ when(mMockContext.getSystemService(Context.CONNECTIVITY_SERVICE))
+ .thenReturn(mockConnectivityManager);
+ final NetworkCapabilities networkCapabilities = new NetworkCapabilities.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED).build();
+ WifiInfo wifiInfo = mock(WifiInfo.class);
+ when(wifiInfo.isPasspointAp()).thenReturn(true);
+ when(wifiInfo.getPasspointFqdn()).thenReturn(FQDN);
+ final NetworkInfo networkInfo =
+ new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
+ networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
+
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockContext, mTestHandler,
+ getPasspointConfiguration(), mMockWifiManager, mMockScoreCache,
+ false /* forSavedNetworksPage */);
+
+ // Disconnected should return false;
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(false);
+
+ // Not validated, Not Default
+ entry.updateConnectionInfo(wifiInfo, networkInfo);
+
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(true);
+
+ // Not Validated, Default
+ entry.setIsDefaultNetwork(true);
+
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(true);
+
+ // Validated, Default
+ entry.updateNetworkCapabilities(networkCapabilities);
+
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(false);
+
+ // Validated, Not Default
+ entry.setIsDefaultNetwork(false);
+
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(true);
+ }
+
+ @Test
public void testGetSpeed_cacheUpdated_speedValueChanges() {
when(mMockScoredNetwork.calculateBadge(GOOD_RSSI)).thenReturn(SPEED_FAST);
PasspointWifiEntry entry = new PasspointWifiEntry(mMockContext, mTestHandler,
@@ -221,4 +267,40 @@ public class PasspointWifiEntryTest {
assertThat(entry.getSpeed()).isEqualTo(SPEED_SLOW);
}
+
+ @Test
+ public void testGetMacAddress_wifiInfoAvailable_usesWifiInfoMacAddress() {
+ final String factoryMac = "01:23:45:67:89:ab";
+ final String wifiInfoMac = "11:23:45:67:89:ab";
+ final WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"ssid\"";
+ config.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_NONE;
+ config.FQDN = FQDN;
+ when(mMockWifiManager.getFactoryMacAddresses()).thenReturn(new String[]{factoryMac});
+ WifiInfo wifiInfo = mock(WifiInfo.class);
+ when(wifiInfo.isPasspointAp()).thenReturn(true);
+ when(wifiInfo.getPasspointFqdn()).thenReturn(FQDN);
+ when(wifiInfo.getMacAddress()).thenReturn(wifiInfoMac);
+ NetworkInfo networkInfo =
+ new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
+ networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockContext, mTestHandler,
+ getPasspointConfiguration(), mMockWifiManager, mMockScoreCache,
+ false /* forSavedNetworksPage */);
+
+ entry.updateConnectionInfo(wifiInfo, networkInfo);
+
+ assertThat(entry.getMacAddress()).isEqualTo(wifiInfoMac);
+ }
+
+ @Test
+ public void testIsAutoJoinEnabled_nullConfigs_returnsFalse() {
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockContext, mTestHandler,
+ getPasspointConfiguration(), mMockWifiManager, mMockScoreCache,
+ false /* forSavedNetworksPage */);
+
+ entry.updatePasspointConfig(null);
+
+ assertThat(entry.isAutoJoinEnabled()).isFalse();
+ }
}
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
index b9a0ca12b..e9194f315 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
@@ -31,6 +31,7 @@ import static com.android.wifitrackerlib.WifiEntry.SECURITY_EAP;
import static com.android.wifitrackerlib.WifiEntry.SECURITY_NONE;
import static com.android.wifitrackerlib.WifiEntry.SECURITY_OWE;
import static com.android.wifitrackerlib.WifiEntry.SECURITY_PSK;
+import static com.android.wifitrackerlib.WifiEntry.SECURITY_SAE;
import static com.android.wifitrackerlib.WifiEntry.SECURITY_WEP;
import static com.android.wifitrackerlib.WifiEntry.SPEED_FAST;
import static com.android.wifitrackerlib.WifiEntry.SPEED_SLOW;
@@ -61,11 +62,15 @@ import android.net.ScoredNetwork;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration.NetworkSelectionStatus;
+import android.net.wifi.WifiEnterpriseConfig;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkScoreCache;
import android.os.Handler;
import android.os.test.TestLooper;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import org.junit.Before;
import org.junit.Test;
@@ -89,6 +94,7 @@ public class StandardWifiEntryTest {
@Mock private WifiEntry.ConnectCallback mMockConnectCallback;
@Mock private WifiManager mMockWifiManager;
@Mock private ConnectivityManager mMockConnectivityManager;
+ @Mock private SubscriptionManager mSubscriptionManager;
@Mock private WifiInfo mMockWifiInfo;
@Mock private NetworkInfo mMockNetworkInfo;
@Mock private Context mMockContext;
@@ -120,6 +126,9 @@ public class StandardWifiEntryTest {
.thenReturn(mMockNetworkScoreManager);
when(mMockScoreCache.getScoredNetwork((ScanResult) any())).thenReturn(mMockScoredNetwork);
when(mMockScoreCache.getScoredNetwork((NetworkKey) any())).thenReturn(mMockScoredNetwork);
+
+ when(mMockContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE))
+ .thenReturn(mSubscriptionManager);
}
/**
@@ -470,6 +479,32 @@ public class StandardWifiEntryTest {
}
@Test
+ public void testGetMacAddress_wifiInfoAvailable_usesWifiInfoMacAddress() {
+ final int networkId = 1;
+ final String factoryMac = "01:23:45:67:89:ab";
+ final String wifiInfoMac = "11:23:45:67:89:ab";
+
+ final NetworkInfo networkInfo =
+ new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
+ networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
+
+ when(mMockWifiInfo.getNetworkId()).thenReturn(networkId);
+ when(mMockWifiInfo.getMacAddress()).thenReturn(wifiInfoMac);
+ final WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"ssid\"";
+ config.networkId = networkId;
+ config.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_NONE;
+ when(mMockWifiManager.getFactoryMacAddresses()).thenReturn(new String[]{factoryMac});
+ final StandardWifiEntry entry = new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_NONE), config,
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */);
+
+ entry.updateConnectionInfo(mMockWifiInfo, networkInfo);
+
+ assertThat(entry.getMacAddress()).isEqualTo(wifiInfoMac);
+ }
+
+ @Test
public void testCanShare_securityCanShare_shouldReturnTrue() {
final StandardWifiEntry pskWifiEntry =
getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_PSK);
@@ -587,6 +622,8 @@ public class StandardWifiEntryTest {
when(mockResources.getString(R.string.summary_separator)).thenReturn(summarySeparator);
when(mockResources.getStringArray(R.array.wifi_status)).thenReturn(wifiStatusArray);
final ConnectivityManager mockConnectivityManager = mock(ConnectivityManager.class);
+ final NetworkCapabilities networkCapabilities = new NetworkCapabilities.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED).build();
when(mMockContext.getSystemService(Context.CONNECTIVITY_SERVICE))
.thenReturn(mockConnectivityManager);
@@ -603,11 +640,56 @@ public class StandardWifiEntryTest {
mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */);
entry.updateConnectionInfo(wifiInfo, networkInfo);
+ entry.updateNetworkCapabilities(networkCapabilities);
+ entry.setIsDefaultNetwork(true);
assertThat(entry.getSummary()).isEqualTo("Connected");
}
@Test
+ public void testShouldShowXLevelIcon_unvalidatedOrNotDefault_returnsTrue() {
+ final int networkId = 1;
+ when(mMockContext.getSystemService(Context.CONNECTIVITY_SERVICE))
+ .thenReturn(mMockConnectivityManager);
+ final NetworkCapabilities networkCapabilities = new NetworkCapabilities.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED).build();
+ final WifiInfo wifiInfo = new WifiInfo.Builder().setNetworkId(networkId).build();
+ final NetworkInfo networkInfo =
+ new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", "");
+ networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", "");
+ final WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"ssid\"";
+ config.networkId = networkId;
+
+ final StandardWifiEntry entry = new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_NONE), config,
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */);
+
+ // Disconnected should return false;
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(false);
+
+ // Not validated, Not Default
+ entry.updateConnectionInfo(wifiInfo, networkInfo);
+
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(true);
+
+ // Not Validated, Default
+ entry.setIsDefaultNetwork(true);
+
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(true);
+
+ // Validated, Default
+ entry.updateNetworkCapabilities(networkCapabilities);
+
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(false);
+
+ // Validated, Not Default
+ entry.setIsDefaultNetwork(false);
+
+ assertThat(entry.shouldShowXLevelIcon()).isEqualTo(true);
+ }
+
+ @Test
public void testGetSecurityString_pskTypeWpa2_getWpa2() {
final StandardWifiEntry entry =
getSavedStandardWifiEntry(WifiConfiguration.SECURITY_TYPE_PSK);
@@ -722,27 +804,6 @@ public class StandardWifiEntryTest {
}
@Test
- public void testShouldEditBeforeConnect_securedNetwork_returnTrueIfNeverConnected() {
- // Test never connected.
- WifiConfiguration wifiConfig = spy(new WifiConfiguration());
- wifiConfig.SSID = "\"ssid\"";
- wifiConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
- StandardWifiEntry entry = new StandardWifiEntry(mMockContext, mTestHandler,
- ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_PSK),
- wifiConfig, mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */);
- NetworkSelectionStatus networkSelectionStatus =
- spy(new NetworkSelectionStatus.Builder().build());
- doReturn(networkSelectionStatus).when(wifiConfig).getNetworkSelectionStatus();
-
- assertThat(entry.shouldEditBeforeConnect()).isTrue();
-
- // Test ever connected.
- doReturn(true).when(networkSelectionStatus).hasEverConnected();
-
- assertThat(entry.shouldEditBeforeConnect()).isFalse();
- }
-
- @Test
public void testShouldEditBeforeConnect_authenticationFailure_returnTrue() {
// Test DISABLED_AUTHENTICATION_FAILURE.
WifiConfiguration wifiConfig = spy(new WifiConfiguration());
@@ -833,4 +894,135 @@ public class StandardWifiEntryTest {
assertThat(entry.getSpeed()).isEqualTo(SPEED_SLOW);
}
+
+ @Test
+ public void testCanConnect_nonEapMethod_returnTrueIfReachable() {
+ StandardWifiEntry spyEntry = spy(new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_NONE),
+ Arrays.asList(buildScanResult("ssid", "bssid0", 0, GOOD_RSSI)),
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+
+ assertThat(spyEntry.canConnect()).isEqualTo(true);
+
+ spyEntry = spy(new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_OWE),
+ Arrays.asList(buildScanResult("ssid", "bssid0", 0, GOOD_RSSI)),
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+
+ assertThat(spyEntry.canConnect()).isEqualTo(true);
+
+ spyEntry = spy(new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_WEP),
+ Arrays.asList(buildScanResult("ssid", "bssid0", 0, GOOD_RSSI)),
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+
+ assertThat(spyEntry.canConnect()).isEqualTo(true);
+
+ spyEntry = spy(new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_PSK),
+ Arrays.asList(buildScanResult("ssid", "bssid0", 0, GOOD_RSSI)),
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+
+ assertThat(spyEntry.canConnect()).isEqualTo(true);
+
+ spyEntry = spy(new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_SAE),
+ Arrays.asList(buildScanResult("ssid", "bssid0", 0, GOOD_RSSI)),
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+
+ assertThat(spyEntry.canConnect()).isEqualTo(true);
+ }
+
+ @Test
+ public void testCanConnect_nonSimMethod_returnTrueIfReachable() {
+ WifiConfiguration mockWifiConfiguration = mock(WifiConfiguration.class);
+ mockWifiConfiguration.SSID = "\"ssid\"";
+ WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
+ when(mockWifiEnterpriseConfig.isAuthenticationSimBased()).thenReturn(false);
+ mockWifiConfiguration.enterpriseConfig = mockWifiEnterpriseConfig;
+ StandardWifiEntry spyEntry = spy(new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_EAP),
+ mockWifiConfiguration,
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */));
+ spyEntry.updateScanResultInfo(Arrays.asList(
+ buildScanResult("ssid", "bssid0", 0, GOOD_RSSI)));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+
+ assertThat(spyEntry.canConnect()).isEqualTo(true);
+ }
+
+ @Test
+ public void testCanConnect_unknownCarrierId_returnTrueIfActiveSubscriptionAvailable() {
+ WifiConfiguration mockWifiConfiguration = mock(WifiConfiguration.class);
+ mockWifiConfiguration.SSID = "\"ssid\"";
+ mockWifiConfiguration.carrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
+ WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
+ when(mockWifiEnterpriseConfig.isAuthenticationSimBased()).thenReturn(true);
+ mockWifiConfiguration.enterpriseConfig = mockWifiEnterpriseConfig;
+ StandardWifiEntry spyEntry = spy(new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_EAP),
+ mockWifiConfiguration,
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */));
+ spyEntry.updateScanResultInfo(Arrays.asList(
+ buildScanResult("ssid", "bssid0", 0, GOOD_RSSI)));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+ when(mSubscriptionManager.getActiveSubscriptionInfoList())
+ .thenReturn(Arrays.asList(mock(SubscriptionInfo.class)));
+
+ assertThat(spyEntry.canConnect()).isEqualTo(true);
+ }
+
+ @Test
+ public void testCanConnect_specifiedCarrierIdMatched_returnTrue() {
+ WifiConfiguration mockWifiConfiguration = mock(WifiConfiguration.class);
+ mockWifiConfiguration.SSID = "\"ssid\"";
+ int carrierId = 6;
+ mockWifiConfiguration.carrierId = carrierId;
+ WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
+ when(mockWifiEnterpriseConfig.isAuthenticationSimBased()).thenReturn(true);
+ mockWifiConfiguration.enterpriseConfig = mockWifiEnterpriseConfig;
+ StandardWifiEntry spyEntry = spy(new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_EAP),
+ mockWifiConfiguration,
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */));
+ spyEntry.updateScanResultInfo(Arrays.asList(
+ buildScanResult("ssid", "bssid0", 0, GOOD_RSSI)));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+ SubscriptionInfo mockSubscriptionInfo = mock(SubscriptionInfo.class);
+ when(mockSubscriptionInfo.getCarrierId()).thenReturn(carrierId);
+ when(mSubscriptionManager.getActiveSubscriptionInfoList())
+ .thenReturn(Arrays.asList(mockSubscriptionInfo));
+
+ assertThat(spyEntry.canConnect()).isEqualTo(true);
+ }
+
+ @Test
+ public void testCanConnect_specifiedCarrierIdNotMatched_returnFalse() {
+ WifiConfiguration mockWifiConfiguration = mock(WifiConfiguration.class);
+ mockWifiConfiguration.SSID = "\"ssid\"";
+ int specifiedCarrierId = 6;
+ int simCarrierId = 7;
+ mockWifiConfiguration.carrierId = specifiedCarrierId;
+ WifiEnterpriseConfig mockWifiEnterpriseConfig = mock(WifiEnterpriseConfig.class);
+ when(mockWifiEnterpriseConfig.isAuthenticationSimBased()).thenReturn(true);
+ mockWifiConfiguration.enterpriseConfig = mockWifiEnterpriseConfig;
+ StandardWifiEntry spyEntry = spy(new StandardWifiEntry(mMockContext, mTestHandler,
+ ssidAndSecurityToStandardWifiEntryKey("ssid", SECURITY_EAP),
+ mockWifiConfiguration,
+ mMockWifiManager, mMockScoreCache, false /* forSavedNetworksPage */));
+ spyEntry.updateScanResultInfo(Arrays.asList(
+ buildScanResult("ssid", "bssid0", 0, GOOD_RSSI)));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+ SubscriptionInfo mockSubscriptionInfo = mock(SubscriptionInfo.class);
+ when(mockSubscriptionInfo.getCarrierId()).thenReturn(simCarrierId);
+ when(mSubscriptionManager.getActiveSubscriptionInfoList())
+ .thenReturn(Arrays.asList(mockSubscriptionInfo));
+
+ assertThat(spyEntry.canConnect()).isEqualTo(false);
+ }
}
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
index feec984bf..1260266c7 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
@@ -21,6 +21,7 @@ import static com.android.wifitrackerlib.TestUtils.buildScanResult;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -29,7 +30,10 @@ import static org.mockito.Mockito.when;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Resources;
import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkScoreManager;
import android.net.wifi.ScanResult;
@@ -73,6 +77,8 @@ public class WifiPickerTrackerTest {
@Mock
private Context mMockContext;
@Mock
+ private Resources mMockResources;
+ @Mock
private WifiManager mMockWifiManager;
@Mock
private ConnectivityManager mMockConnectivityManager;
@@ -86,11 +92,19 @@ public class WifiPickerTrackerTest {
private WifiInfo mMockWifiInfo;
@Mock
private NetworkInfo mMockNetworkInfo;
+ @Mock
+ private Network mMockNetwork;
private TestLooper mTestLooper;
private final ArgumentCaptor<BroadcastReceiver> mBroadcastReceiverCaptor =
ArgumentCaptor.forClass(BroadcastReceiver.class);
+ private final ArgumentCaptor<ConnectivityManager.NetworkCallback>
+ mNetworkCallbackCaptor =
+ ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
+ private final ArgumentCaptor<ConnectivityManager.NetworkCallback>
+ mDefaultNetworkCallbackCaptor =
+ ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
private WifiPickerTracker createTestWifiPickerTracker() {
final Handler testHandler = new Handler(mTestLooper.getLooper());
@@ -121,6 +135,7 @@ public class WifiPickerTrackerTest {
when(mMockWifiInfo.getRssi()).thenReturn(WifiInfo.INVALID_RSSI);
when(mMockNetworkInfo.getDetailedState()).thenReturn(
NetworkInfo.DetailedState.DISCONNECTED);
+ when(mMockContext.getResources()).thenReturn(mMockResources);
when(mMockContext.getSystemService(Context.NETWORK_SCORE_SERVICE))
.thenReturn(mMockNetworkScoreManager);
}
@@ -504,6 +519,44 @@ public class WifiPickerTrackerTest {
}
/**
+ * Tests that a connected WifiEntry will return "Low quality" as the summary if Wifi is
+ * validated but cell is the default route.
+ */
+ @Test
+ public void testGetConnectedEntry_wifiValidatedCellDefault_isLowQuality() {
+ final String lowQuality = "Low quality";
+ when(mMockResources.getString(anyInt())).thenReturn("");
+ when(mMockResources.getString(R.string.wifi_connected_low_quality)).thenReturn(lowQuality);
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ final WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"ssid\"";
+ config.networkId = 1;
+ when(mMockWifiManager.getPrivilegedConfiguredNetworks())
+ .thenReturn(Collections.singletonList(config));
+ when(mMockWifiManager.getScanResults()).thenReturn(Arrays.asList(
+ buildScanResult("ssid", "bssid", START_MILLIS)));
+ when(mMockWifiInfo.getNetworkId()).thenReturn(1);
+ when(mMockWifiInfo.getRssi()).thenReturn(-50);
+ when(mMockNetworkInfo.getDetailedState()).thenReturn(NetworkInfo.DetailedState.CONNECTED);
+ when(mMockConnectivityManager.getNetworkInfo(any())).thenReturn(mMockNetworkInfo);
+ wifiPickerTracker.onStart();
+ verify(mMockConnectivityManager)
+ .registerNetworkCallback(any(), mNetworkCallbackCaptor.capture(), any());
+ verify(mMockConnectivityManager)
+ .registerDefaultNetworkCallback(mDefaultNetworkCallbackCaptor.capture(), any());
+ mTestLooper.dispatchAll();
+
+ mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork,
+ new NetworkCapabilities.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED).build());
+ mDefaultNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork,
+ new NetworkCapabilities.Builder()
+ .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).build());
+
+ assertThat(wifiPickerTracker.getConnectedWifiEntry().getSummary()).isEqualTo(lowQuality);
+ }
+
+ /**
* Tests that a PasspointWifiEntry is returned when Passpoint scans are visible.
*/
@Test
@@ -596,7 +649,6 @@ public class WifiPickerTrackerTest {
config.networkId = networkId;
config.allowedKeyManagement = new BitSet();
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192);
-
when(config.isPasspoint()).thenReturn(true);
when(config.getKey()).thenReturn(passpointConfig.getUniqueId());
when(mMockWifiManager.getPrivilegedConfiguredNetworks())
@@ -617,6 +669,51 @@ public class WifiPickerTrackerTest {
assertThat(wifiPickerTracker.getConnectedWifiEntry().getTitle()).isEqualTo(friendlyName);
}
+ @Test
+ public void testGetConnectedEntry_passpointWithoutScans_returnsPasspointEntry() {
+ final String fqdn = "fqdn";
+ final String friendlyName = "friendlyName";
+ final int networkId = 1;
+ // Create a passpoint configuration to match with the current network
+ final PasspointConfiguration passpointConfig = new PasspointConfiguration();
+ final HomeSp homeSp = new HomeSp();
+ homeSp.setFqdn(fqdn);
+ homeSp.setFriendlyName(friendlyName);
+ passpointConfig.setHomeSp(homeSp);
+ passpointConfig.setCredential(new Credential());
+ when(mMockWifiManager.getPasspointConfigurations())
+ .thenReturn(Collections.singletonList(passpointConfig));
+ // Create a wifi config to match the WifiInfo netId and unique id of the passpoint config
+ final WifiConfiguration config = Mockito.mock(WifiConfiguration.class);
+ config.SSID = "\"ssid\"";
+ config.networkId = networkId;
+ config.allowedKeyManagement = new BitSet();
+ config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192);
+ when(config.isPasspoint()).thenReturn(true);
+ when(config.getKey()).thenReturn(passpointConfig.getUniqueId());
+ when(mMockWifiManager.getPrivilegedConfiguredNetworks())
+ .thenReturn(Collections.singletonList(config));
+ when(mMockWifiInfo.isPasspointAp()).thenReturn(true);
+ when(mMockWifiInfo.getNetworkId()).thenReturn(networkId);
+ when(mMockWifiInfo.getPasspointFqdn()).thenReturn(fqdn);
+ when(mMockWifiInfo.getRssi()).thenReturn(-50);
+ when(mMockNetworkInfo.getDetailedState()).thenReturn(NetworkInfo.DetailedState.CONNECTED);
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ wifiPickerTracker.onStart();
+ verify(mMockContext).registerReceiver(mBroadcastReceiverCaptor.capture(),
+ any(), any(), any());
+ mTestLooper.dispatchAll();
+
+ // Update with SCAN_RESULTS_AVAILABLE action while there are no scan results available yet.
+ mBroadcastReceiverCaptor.getValue().onReceive(mMockContext,
+ new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
+ mTestLooper.dispatchAll();
+
+ verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ assertThat(wifiPickerTracker.getConnectedWifiEntry()).isNotNull();
+ assertThat(wifiPickerTracker.getConnectedWifiEntry().getTitle()).isEqualTo(friendlyName);
+ }
+
/**
* Tests that SCAN_RESULTS_AVAILABLE_ACTION calls WifiManager#getMatchingOsuProviders()
*/
diff --git a/libwifi_hal/Android.mk b/libwifi_hal/Android.mk
index 7bdbc3259..3c05d9b57 100644
--- a/libwifi_hal/Android.mk
+++ b/libwifi_hal/Android.mk
@@ -105,6 +105,8 @@ else ifeq ($(BOARD_WLAN_DEVICE), realtek)
LIB_WIFI_HAL := libwifi-hal-rtk
else ifeq ($(BOARD_WLAN_DEVICE), emulator)
LIB_WIFI_HAL := libwifi-hal-emu
+else ifeq ($(BOARD_WLAN_DEVICE), slsi)
+ LIB_WIFI_HAL := libwifi-hal-slsi
endif
# The WiFi HAL that you should be linking.
diff --git a/service/AndroidManifest_Resources.xml b/service/AndroidManifest_Resources.xml
index 6d637cb53..04ba1d38b 100644
--- a/service/AndroidManifest_Resources.xml
+++ b/service/AndroidManifest_Resources.xml
@@ -22,6 +22,7 @@
coreApp="true"
android:versionCode="1"
android:versionName="R-initial">
+ <protected-broadcast android:name="com.android.server.wifi.action.CarrierNetwork.USER_CLICKED" />
<application
android:label="@string/wifiResourcesAppLabel"
android:defaultToDeviceProtectedStorage="true"
diff --git a/service/java/com/android/server/wifi/ActiveModeWarden.java b/service/java/com/android/server/wifi/ActiveModeWarden.java
index cf54e328b..e370a8c02 100644
--- a/service/java/com/android/server/wifi/ActiveModeWarden.java
+++ b/service/java/com/android/server/wifi/ActiveModeWarden.java
@@ -966,4 +966,7 @@ public class ActiveModeWarden {
}
}
}
+
+ public void registerStaEventCallback() {}
+ public void unregisterStaEventCallback() {}
}
diff --git a/service/java/com/android/server/wifi/BaseWifiService.java b/service/java/com/android/server/wifi/BaseWifiService.java
index 7614cf6eb..9e2f93561 100644
--- a/service/java/com/android/server/wifi/BaseWifiService.java
+++ b/service/java/com/android/server/wifi/BaseWifiService.java
@@ -27,6 +27,7 @@ import android.net.wifi.IOnWifiActivityEnergyInfoListener;
import android.net.wifi.IOnWifiUsabilityStatsListener;
import android.net.wifi.IScanResultsCallback;
import android.net.wifi.ISoftApCallback;
+import android.net.wifi.IStaStateCallback;
import android.net.wifi.ISuggestionConnectionStatusListener;
import android.net.wifi.ITrafficStateCallback;
import android.net.wifi.ITxPacketCountListener;
@@ -677,4 +678,15 @@ public class BaseWifiService extends IWifiManager.Stub {
public boolean isAutoWakeupEnabled() {
throw new UnsupportedOperationException();
}
+
+ @Override
+ public void registerStaStateCallback(
+ IBinder binder, IStaStateCallback callback, int callbackIdentifier) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void unregisterStaStateCallback(int callbackIdentifier) {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/service/java/com/android/server/wifi/BssidBlocklistMonitor.java b/service/java/com/android/server/wifi/BssidBlocklistMonitor.java
index dffd77443..e3fe32ab7 100644
--- a/service/java/com/android/server/wifi/BssidBlocklistMonitor.java
+++ b/service/java/com/android/server/wifi/BssidBlocklistMonitor.java
@@ -18,9 +18,12 @@ package com.android.server.wifi;
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.content.Context;
+import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.util.ArrayMap;
+import android.util.ArraySet;
import android.util.LocalLog;
import android.util.Log;
@@ -32,8 +35,11 @@ import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Calendar;
+import java.util.Collections;
import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -55,7 +61,7 @@ public class BssidBlocklistMonitor {
public static final int REASON_EAP_FAILURE = 3;
// Other association rejection failures
public static final int REASON_ASSOCIATION_REJECTION = 4;
- // Associated timeout failures, when the RSSI is good
+ // Association timeout failures.
public static final int REASON_ASSOCIATION_TIMEOUT = 5;
// Other authentication failures
public static final int REASON_AUTHENTICATION_FAILURE = 6;
@@ -63,8 +69,15 @@ public class BssidBlocklistMonitor {
public static final int REASON_DHCP_FAILURE = 7;
// Abnormal disconnect error
public static final int REASON_ABNORMAL_DISCONNECT = 8;
+ // AP initiated disconnect for a given duration.
+ public static final int REASON_FRAMEWORK_DISCONNECT_MBO_OCE = 9;
+ // Avoid connecting to the failed AP when trying to reconnect on other available candidates.
+ public static final int REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT = 10;
+ // The connected scorer has disconnected this network.
+ public static final int REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE = 11;
// Constant being used to keep track of how many failure reasons there are.
- public static final int NUMBER_REASON_CODES = 9;
+ public static final int NUMBER_REASON_CODES = 12;
+ public static final int INVALID_REASON = -1;
@IntDef(prefix = { "REASON_" }, value = {
REASON_AP_UNABLE_TO_HANDLE_NEW_STA,
@@ -74,7 +87,11 @@ public class BssidBlocklistMonitor {
REASON_ASSOCIATION_REJECTION,
REASON_ASSOCIATION_TIMEOUT,
REASON_AUTHENTICATION_FAILURE,
- REASON_DHCP_FAILURE
+ REASON_DHCP_FAILURE,
+ REASON_ABNORMAL_DISCONNECT,
+ REASON_FRAMEWORK_DISCONNECT_MBO_OCE,
+ REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT,
+ REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE
})
@Retention(RetentionPolicy.SOURCE)
public @interface FailureReason {}
@@ -91,11 +108,23 @@ public class BssidBlocklistMonitor {
"REASON_ASSOCIATION_TIMEOUT",
"REASON_AUTHENTICATION_FAILURE",
"REASON_DHCP_FAILURE",
- "REASON_ABNORMAL_DISCONNECT"
+ "REASON_ABNORMAL_DISCONNECT",
+ "REASON_FRAMEWORK_DISCONNECT_MBO_OCE",
+ "REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT",
+ "REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE"
};
- private static final String FAILURE_BSSID_BLOCKED_BY_FRAMEWORK_REASON_STRING =
- "BlockedByFramework";
+ private static final Set<Integer> LOW_RSSI_SENSITIVE_FAILURES = new ArraySet<>(Arrays.asList(
+ REASON_NETWORK_VALIDATION_FAILURE,
+ REASON_EAP_FAILURE,
+ REASON_ASSOCIATION_REJECTION,
+ REASON_ASSOCIATION_TIMEOUT,
+ REASON_AUTHENTICATION_FAILURE,
+ REASON_DHCP_FAILURE,
+ REASON_ABNORMAL_DISCONNECT,
+ REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE
+ ));
private static final long ABNORMAL_DISCONNECT_RESET_TIME_MS = TimeUnit.HOURS.toMillis(3);
+ private static final int MIN_RSSI_DIFF_TO_UNBLOCK_BSSID = 5;
private static final String TAG = "BssidBlocklistMonitor";
private final Context mContext;
@@ -105,6 +134,7 @@ public class BssidBlocklistMonitor {
private final LocalLog mLocalLog;
private final Calendar mCalendar;
private final WifiScoreCard mWifiScoreCard;
+ private final ScoringParams mScoringParams;
// Map of bssid to BssidStatus
private Map<String, BssidStatus> mBssidStatusMap = new ArrayMap<>();
@@ -117,7 +147,7 @@ public class BssidBlocklistMonitor {
*/
BssidBlocklistMonitor(Context context, WifiConnectivityHelper connectivityHelper,
WifiLastResortWatchdog wifiLastResortWatchdog, Clock clock, LocalLog localLog,
- WifiScoreCard wifiScoreCard) {
+ WifiScoreCard wifiScoreCard, ScoringParams scoringParams) {
mContext = context;
mConnectivityHelper = connectivityHelper;
mWifiLastResortWatchdog = wifiLastResortWatchdog;
@@ -125,6 +155,7 @@ public class BssidBlocklistMonitor {
mLocalLog = localLog;
mCalendar = Calendar.getInstance();
mWifiScoreCard = wifiScoreCard;
+ mScoringParams = scoringParams;
}
// A helper to log debugging information in the local log buffer, which can
@@ -160,10 +191,12 @@ public class BssidBlocklistMonitor {
mBssidStatusHistoryLogger.dump(pw);
}
- private void addToBlocklist(@NonNull BssidStatus entry, long durationMs, String reasonString) {
- entry.addToBlocklist(durationMs, reasonString);
+ private void addToBlocklist(@NonNull BssidStatus entry, long durationMs,
+ @FailureReason int reason, int rssi) {
+ entry.setAsBlocked(durationMs, reason, rssi);
localLog(TAG + " addToBlocklist: bssid=" + entry.bssid + ", ssid=" + entry.ssid
- + ", durationMs=" + durationMs + ", reason=" + reasonString);
+ + ", durationMs=" + durationMs + ", reason=" + getFailureReasonString(reason)
+ + ", rssi=" + rssi);
}
/**
@@ -217,13 +250,20 @@ public class BssidBlocklistMonitor {
/**
* Block any attempts to auto-connect to the BSSID for the specified duration.
+ * This is meant to be used by features that need wifi to avoid a BSSID for a certain duration,
+ * and thus will not increase the failure streak counters.
+ * @param bssid identifies the AP to block.
+ * @param ssid identifies the SSID the AP belongs to.
+ * @param durationMs duration in millis to block.
+ * @param blockReason reason for blocking the BSSID.
+ * @param rssi the latest RSSI observed.
*/
public void blockBssidForDurationMs(@NonNull String bssid, @NonNull String ssid,
- long durationMs) {
- if (bssid == null || ssid == null || WifiManager.UNKNOWN_SSID.equals(ssid)
- || bssid.equals(ClientModeImpl.SUPPLICANT_BSSID_ANY) || durationMs <= 0) {
+ long durationMs, @FailureReason int blockReason, int rssi) {
+ if (durationMs <= 0 || !isValidNetworkAndFailureReason(bssid, ssid, blockReason)) {
Log.e(TAG, "Invalid input: BSSID=" + bssid + ", SSID=" + ssid
- + ", durationMs=" + durationMs);
+ + ", durationMs=" + durationMs + ", blockReason=" + blockReason
+ + ", rssi=" + rssi);
return;
}
BssidStatus status = getOrCreateBssidStatus(bssid, ssid);
@@ -232,11 +272,13 @@ public class BssidBlocklistMonitor {
// Return because this BSSID is already being blocked for a longer time.
return;
}
- addToBlocklist(status, durationMs, FAILURE_BSSID_BLOCKED_BY_FRAMEWORK_REASON_STRING);
+ addToBlocklist(status, durationMs, blockReason, rssi);
}
private String getFailureReasonString(@FailureReason int reasonCode) {
- if (reasonCode >= FAILURE_REASON_STRINGS.length) {
+ if (reasonCode == INVALID_REASON) {
+ return "INVALID_REASON";
+ } else if (reasonCode < 0 || reasonCode >= FAILURE_REASON_STRINGS.length) {
return "REASON_UNKNOWN";
}
return FAILURE_REASON_STRINGS[reasonCode];
@@ -278,7 +320,7 @@ public class BssidBlocklistMonitor {
}
private boolean handleBssidConnectionFailureInternal(String bssid, String ssid,
- @FailureReason int reasonCode, boolean isLowRssi) {
+ @FailureReason int reasonCode, int rssi) {
BssidStatus entry = incrementFailureCountForBssid(bssid, ssid, reasonCode);
int failureThreshold = getFailureThresholdForReason(reasonCode);
int currentStreak = mWifiScoreCard.getBssidBlocklistStreak(ssid, bssid, reasonCode);
@@ -288,28 +330,33 @@ public class BssidBlocklistMonitor {
if (shouldWaitForWatchdogToTriggerFirst(bssid, reasonCode)) {
return false;
}
- int baseBlockDurationMs = mContext.getResources().getInteger(
- R.integer.config_wifiBssidBlocklistMonitorBaseBlockDurationMs);
- if ((reasonCode == REASON_ASSOCIATION_TIMEOUT
- || reasonCode == REASON_ABNORMAL_DISCONNECT) && isLowRssi) {
- baseBlockDurationMs = mContext.getResources().getInteger(
- R.integer.config_wifiBssidBlocklistMonitorBaseLowRssiBlockDurationMs);
- }
+ int baseBlockDurationMs = getBaseBlockDurationForReason(reasonCode);
addToBlocklist(entry,
getBlocklistDurationWithExponentialBackoff(currentStreak, baseBlockDurationMs),
- getFailureReasonString(reasonCode));
+ reasonCode, rssi);
mWifiScoreCard.incrementBssidBlocklistStreak(ssid, bssid, reasonCode);
return true;
}
return false;
}
+ private int getBaseBlockDurationForReason(int blockReason) {
+ switch (blockReason) {
+ case REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE:
+ return mContext.getResources().getInteger(R.integer
+ .config_wifiBssidBlocklistMonitorConnectedScoreBaseBlockDurationMs);
+ default:
+ return mContext.getResources().getInteger(
+ R.integer.config_wifiBssidBlocklistMonitorBaseBlockDurationMs);
+ }
+ }
+
/**
* Note a failure event on a bssid and perform appropriate actions.
* @return True if the blocklist has been modified.
*/
public boolean handleBssidConnectionFailure(String bssid, String ssid,
- @FailureReason int reasonCode, boolean isLowRssi) {
+ @FailureReason int reasonCode, int rssi) {
if (!isValidNetworkAndFailureReason(bssid, ssid, reasonCode)) {
return false;
}
@@ -322,7 +369,7 @@ public class BssidBlocklistMonitor {
return false;
}
}
- return handleBssidConnectionFailureInternal(bssid, ssid, reasonCode, isLowRssi);
+ return handleBssidConnectionFailureInternal(bssid, ssid, reasonCode, rssi);
}
/**
@@ -346,6 +393,8 @@ public class BssidBlocklistMonitor {
ssid, bssid, connectionTime);
if (connectionTime - prevConnectionTime > ABNORMAL_DISCONNECT_RESET_TIME_MS) {
mWifiScoreCard.resetBssidBlocklistStreak(ssid, bssid, REASON_ABNORMAL_DISCONNECT);
+ mWifiScoreCard.resetBssidBlocklistStreak(ssid, bssid,
+ REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE);
}
BssidStatus status = mBssidStatusMap.get(bssid);
@@ -380,7 +429,10 @@ public class BssidBlocklistMonitor {
* remove the BSSID from blocklist to make sure we are not accidentally blocking good
* BSSIDs.
**/
- status.removeFromBlocklist();
+ if (status.isInBlocklist) {
+ mBssidStatusHistoryLogger.add(status, "Network validation success");
+ mBssidStatusMap.remove(bssid);
+ }
}
/**
@@ -448,11 +500,36 @@ public class BssidBlocklistMonitor {
* @param ssid
* @return the number of BSSIDs currently in the blocklist for the |ssid|.
*/
- public int getNumBlockedBssidsForSsid(@NonNull String ssid) {
+ public int updateAndGetNumBlockedBssidsForSsid(@NonNull String ssid) {
return (int) updateAndGetBssidBlocklistInternal()
.filter(entry -> ssid.equals(entry.ssid)).count();
}
+ private int getNumBlockedBssidsForSsid(@Nullable String ssid) {
+ if (ssid == null) {
+ return 0;
+ }
+ return (int) mBssidStatusMap.values().stream()
+ .filter(entry -> entry.isInBlocklist && ssid.equals(entry.ssid))
+ .count();
+ }
+
+ /**
+ * Overloaded version of updateAndGetBssidBlocklist.
+ * Accepts a @Nullable String ssid as input, and updates the firmware roaming
+ * configuration if the blocklist for the input ssid has been changed.
+ * @param ssid to update firmware roaming configuration for.
+ * @return Set of BSSIDs currently in the blocklist
+ */
+ public Set<String> updateAndGetBssidBlocklistForSsid(@Nullable String ssid) {
+ int numBefore = getNumBlockedBssidsForSsid(ssid);
+ Set<String> bssidBlocklist = updateAndGetBssidBlocklist();
+ if (getNumBlockedBssidsForSsid(ssid) != numBefore) {
+ updateFirmwareRoamingConfiguration(ssid);
+ }
+ return bssidBlocklist;
+ }
+
/**
* Gets the BSSIDs that are currently in the blocklist.
* @return Set of BSSIDs currently in the blocklist
@@ -464,6 +541,47 @@ public class BssidBlocklistMonitor {
}
/**
+ * Gets the list of block reasons for BSSIDs currently in the blocklist.
+ * @return The set of unique reasons for blocking BSSIDs with this SSID.
+ */
+ public Set<Integer> getFailureReasonsForSsid(@NonNull String ssid) {
+ if (ssid == null) {
+ return Collections.emptySet();
+ }
+ return mBssidStatusMap.values().stream()
+ .filter(entry -> entry.isInBlocklist && ssid.equals(entry.ssid))
+ .map(entry -> entry.blockReason)
+ .collect(Collectors.toSet());
+ }
+
+ /**
+ * Attempts to re-enable BSSIDs that likely experienced failures due to low RSSI.
+ * @param scanDetails
+ */
+ public void tryEnablingBlockedBssids(List<ScanDetail> scanDetails) {
+ if (scanDetails == null) {
+ return;
+ }
+ for (ScanDetail scanDetail : scanDetails) {
+ ScanResult scanResult = scanDetail.getScanResult();
+ if (scanResult == null) {
+ continue;
+ }
+ BssidStatus status = mBssidStatusMap.get(scanResult.BSSID);
+ if (status == null || !status.isInBlocklist
+ || !LOW_RSSI_SENSITIVE_FAILURES.contains(status.blockReason)) {
+ continue;
+ }
+ int sufficientRssi = mScoringParams.getSufficientRssi(scanResult.frequency);
+ if (status.lastRssi < sufficientRssi && scanResult.level >= sufficientRssi
+ && scanResult.level - status.lastRssi >= MIN_RSSI_DIFF_TO_UNBLOCK_BSSID) {
+ mBssidStatusHistoryLogger.add(status, "rssi significantly improved");
+ mBssidStatusMap.remove(status.bssid);
+ }
+ }
+ }
+
+ /**
* Removes expired BssidStatus entries and then return remaining entries in the blocklist.
* @return Stream of BssidStatus for BSSIDs that are in the blocklist.
*/
@@ -567,7 +685,9 @@ public class BssidBlocklistMonitor {
public final String bssid;
public final String ssid;
public final int[] failureCount = new int[NUMBER_REASON_CODES];
- private String mBlockReason = ""; // reason of blocking for logging only
+ public int blockReason = INVALID_REASON; // reason of blocking this BSSID
+ // The latest RSSI that's seen before this BSSID is added to blocklist.
+ public int lastRssi = 0;
// The following are used to flag how long this BSSID stays in the blocklist.
public boolean isInBlocklist;
@@ -588,26 +708,17 @@ public class BssidBlocklistMonitor {
}
/**
- * Add this BSSID to blocklist for the specified duration.
+ * Set this BSSID as blocked for the specified duration.
* @param durationMs
+ * @param blockReason
+ * @param rssi
*/
- public void addToBlocklist(long durationMs, String blockReason) {
+ public void setAsBlocked(long durationMs, @FailureReason int blockReason, int rssi) {
isInBlocklist = true;
blocklistStartTimeMs = mClock.getWallClockMillis();
blocklistEndTimeMs = blocklistStartTimeMs + durationMs;
- mBlockReason = blockReason;
- }
-
- /**
- * Remove this BSSID from the blocklist.
- */
- public void removeFromBlocklist() {
- mBssidStatusHistoryLogger.add(this, "removeFromBlocklist");
- isInBlocklist = false;
- blocklistStartTimeMs = 0;
- blocklistEndTimeMs = 0;
- mBlockReason = "";
- localLog(TAG + " removeFromBlocklist BSSID=" + bssid);
+ this.blockReason = blockReason;
+ lastRssi = rssi;
}
@Override
@@ -617,7 +728,8 @@ public class BssidBlocklistMonitor {
sb.append(", SSID=" + ssid);
sb.append(", isInBlocklist=" + isInBlocklist);
if (isInBlocklist) {
- sb.append(", blockReason=" + mBlockReason);
+ sb.append(", blockReason=" + getFailureReasonString(blockReason));
+ sb.append(", lastRssi=" + lastRssi);
mCalendar.setTimeInMillis(blocklistStartTimeMs);
sb.append(", blocklistStartTimeMs="
+ String.format("%tm-%td %tH:%tM:%tS.%tL", mCalendar, mCalendar,
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index 6c31185da..14866c87e 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -355,6 +355,8 @@ public class ClientModeImpl extends StateMachine {
private DetailedState mNetworkAgentState;
private SupplicantStateTracker mSupplicantStateTracker;
+ private int mWifiLinkLayerStatsSupported = 4; // Temporary disable
+
// Indicates that framework is attempting to roam, set true on CMD_START_ROAM, set false when
// wifi connects or fails to connect
private boolean mIsAutoRoaming = false;
@@ -811,7 +813,8 @@ public class ClientModeImpl extends StateMachine {
mWifiScoreReport = new WifiScoreReport(mWifiInjector.getScoringParams(), mClock,
mWifiMetrics, mWifiInfo, mWifiNative, mBssidBlocklistMonitor,
- mWifiInjector.getWifiThreadRunner());
+ mWifiInjector.getWifiThreadRunner(), mWifiInjector.getDeviceConfigFacade(),
+ mContext, looper, mFacade);
mNetworkCapabilitiesFilter = new NetworkCapabilities.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
@@ -909,8 +912,6 @@ public class ClientModeImpl extends StateMachine {
getHandler());
mWifiMonitor.registerHandler(mInterfaceName, WifiMonitor.NETWORK_CONNECTION_EVENT,
getHandler());
- mWifiMonitor.registerHandler(mInterfaceName, WifiMonitor.FILS_NETWORK_CONNECTION_EVENT,
- getHandler());
mWifiMonitor.registerHandler(mInterfaceName, WifiMonitor.NETWORK_DISCONNECTION_EVENT,
getHandler());
mWifiMonitor.registerHandler(mInterfaceName, WifiMonitor.RX_HS20_ANQP_ICON_EVENT,
@@ -1112,6 +1113,10 @@ public class ClientModeImpl extends StateMachine {
// Clear invalid cached data.
mWifiNative.removeNetworkCachedData(oldConfig.networkId);
+ if (WifiConfigurationUtil.hasCredentialChanged(oldConfig, newConfig)) {
+ mBssidBlocklistMonitor.handleNetworkRemoved(newConfig.SSID);
+ }
+
// Check if user/app change meteredOverride for connected network.
if (newConfig.networkId != mLastNetworkId
|| newConfig.meteredOverride == oldConfig.meteredOverride) {
@@ -1301,15 +1306,20 @@ public class ClientModeImpl extends StateMachine {
loge("getWifiLinkLayerStats called without an interface");
return null;
}
+ WifiLinkLayerStats stats = null;
mLastLinkLayerStatsUpdate = mClock.getWallClockMillis();
- WifiLinkLayerStats stats = mWifiNative.getWifiLinkLayerStats(mInterfaceName);
- if (stats != null) {
- mOnTime = stats.on_time;
- mTxTime = stats.tx_time;
- mRxTime = stats.rx_time;
- mRunningBeaconCount = stats.beacon_rx;
- mWifiInfo.updatePacketRates(stats, mLastLinkLayerStatsUpdate);
- } else {
+ if (mWifiLinkLayerStatsSupported > 0) {
+ stats = mWifiNative.getWifiLinkLayerStats(mInterfaceName);
+ if (stats == null) {
+ mWifiLinkLayerStatsSupported -= 1;
+ } else {
+ mOnTime = stats.on_time;
+ mTxTime = stats.tx_time;
+ mRxTime = stats.rx_time;
+ mRunningBeaconCount = stats.beacon_rx;
+ mWifiInfo.updatePacketRates(stats, mLastLinkLayerStatsUpdate);
+ }
+ } else { // LinkLayerStats are broken or unsupported
long mTxPkts = mFacade.getTxPackets(mInterfaceName);
long mRxPkts = mFacade.getRxPackets(mInterfaceName);
mWifiInfo.updatePacketRates(mTxPkts, mRxPkts, mLastLinkLayerStatsUpdate);
@@ -1993,7 +2003,6 @@ public class ClientModeImpl extends StateMachine {
}
sb.append(" blacklist=" + Boolean.toString(mDidBlackListBSSID));
break;
- case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT:
case WifiMonitor.NETWORK_CONNECTION_EVENT:
sb.append(" ");
sb.append(Integer.toString(msg.arg1));
@@ -2259,9 +2268,6 @@ public class ClientModeImpl extends StateMachine {
case WifiMonitor.NETWORK_CONNECTION_EVENT:
s = "NETWORK_CONNECTION_EVENT";
break;
- case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT:
- s = "FILS_NETWORK_CONNECTION_EVENT";
- break;
case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
s = "NETWORK_DISCONNECTION_EVENT";
break;
@@ -2558,7 +2564,6 @@ public class ClientModeImpl extends StateMachine {
private void sendLinkConfigurationChangedBroadcast() {
Intent intent = new Intent(WifiManager.ACTION_LINK_CONFIGURATION_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
- intent.putExtra(WifiManager.EXTRA_LINK_PROPERTIES, new LinkProperties(mLinkProperties));
mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
}
@@ -2966,13 +2971,8 @@ public class ClientModeImpl extends StateMachine {
mWifiHealthMonitor.getScanRssiValidTimeMs());
mWifiScoreCard.noteConnectionFailure(mWifiInfo, scanRssi, ssid, blocklistReason);
checkAbnormalConnectionFailureAndTakeBugReport(ssid);
- boolean isLowRssi = false;
- int sufficientRssi = getSufficientRssi(networkId, bssid);
- if (scanRssi != WifiInfo.INVALID_RSSI && sufficientRssi != WifiInfo.INVALID_RSSI) {
- isLowRssi = scanRssi < sufficientRssi;
- }
mBssidBlocklistMonitor.handleBssidConnectionFailure(bssid, ssid, blocklistReason,
- isLowRssi);
+ scanRssi);
}
}
@@ -3441,6 +3441,7 @@ public class ClientModeImpl extends StateMachine {
break;
case CMD_INITIALIZE:
mWifiNative.initialize();
+ mWifiScoreReport.initialize();
break;
case CMD_BOOT_COMPLETED:
// get other services that we need to manage
@@ -3455,7 +3456,6 @@ public class ClientModeImpl extends StateMachine {
case CMD_RECONNECT:
case CMD_REASSOCIATE:
case WifiMonitor.NETWORK_CONNECTION_EVENT:
- case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT:
case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
@@ -3515,6 +3515,10 @@ public class ClientModeImpl extends StateMachine {
mTemporarilyDisconnectWifi = (message.arg1 == 1);
replyToMessage(message, WifiP2pServiceImpl.DISCONNECT_WIFI_RESPONSE);
break;
+ case WifiP2pServiceImpl.SET_MIRACAST_MODE:
+ if (mVerboseLoggingEnabled) logd("SET_MIRACAST_MODE: " + (int)message.arg1);
+ mWifiConnectivityManager.saveMiracastMode((int)message.arg1);
+ break;
/* Link configuration (IP address, DNS, ...) changes notified via netlink */
case CMD_UPDATE_LINKPROPERTIES:
updateLinkProperties((LinkProperties) message.obj);
@@ -3686,9 +3690,10 @@ public class ClientModeImpl extends StateMachine {
// TODO: b/79504296 This broadcast has been deprecated and should be removed
sendSupplicantConnectionChangedBroadcast(false);
- // Let's remove any ephemeral or passpoint networks.
+ // Remove any ephemeral or Passpoint networks, flush ANQP cache
mWifiConfigManager.removeAllEphemeralOrPasspointConfiguredNetworks();
mWifiConfigManager.clearUserTemporarilyDisabledList();
+ mPasspointManager.clearAnqpRequestsAndFlushCache();
}
void registerConnected() {
@@ -4211,12 +4216,11 @@ public class ClientModeImpl extends StateMachine {
}
handleStatus = NOT_HANDLED;
break;
- case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT:
- mWifiMetrics.incrementL2ConnectionThroughFilsAuthCount();
- mSentHLPs = true;
case WifiMonitor.NETWORK_CONNECTION_EVENT:
if (mVerboseLoggingEnabled) log("Network connection established");
mLastNetworkId = message.arg1;
+ mSentHLPs = message.arg2 == 1;
+ if (mSentHLPs) mWifiMetrics.incrementL2ConnectionThroughFilsAuthCount();
mWifiConfigManager.clearRecentFailureReason(mLastNetworkId);
mLastBssid = (String) message.obj;
reasonCode = message.arg2;
@@ -4906,14 +4910,11 @@ public class ClientModeImpl extends StateMachine {
}
break;
case WifiMonitor.NETWORK_CONNECTION_EVENT:
- case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT:
mWifiInfo.setBSSID((String) message.obj);
mLastNetworkId = message.arg1;
mWifiInfo.setNetworkId(mLastNetworkId);
mWifiInfo.setMacAddress(mWifiNative.getMacAddress(mInterfaceName));
- if (!mLastBssid.equals(message.obj)) {
- mLastBssid = (String) message.obj;
- }
+ mLastBssid = (String) message.obj;
break;
case CMD_ONESHOT_RSSI_POLL:
if (!mEnableRssiPolling) {
@@ -5014,11 +5015,12 @@ public class ClientModeImpl extends StateMachine {
&& mLastNetworkId != WifiConfiguration.INVALID_NETWORK_ID) {
WifiConfiguration config =
mWifiConfigManager.getConfiguredNetwork(mLastNetworkId);
- if ((message.arg1 == RESET_SIM_REASON_DEFAULT_DATA_SIM_CHANGED
+ if (config != null
+ && ((message.arg1 == RESET_SIM_REASON_DEFAULT_DATA_SIM_CHANGED
&& config.carrierId != TelephonyManager.UNKNOWN_CARRIER_ID)
|| (config.enterpriseConfig != null
&& config.enterpriseConfig.isAuthenticationSimBased()
- && !mWifiCarrierInfoManager.isSimPresent(mLastSubId))) {
+ && !mWifiCarrierInfoManager.isSimPresent(mLastSubId)))) {
mWifiMetrics.logStaEvent(StaEvent.TYPE_FRAMEWORK_DISCONNECT,
StaEvent.DISCONNECT_RESET_SIM_NETWORKS);
// remove local PMKSA cache in framework
@@ -5420,15 +5422,11 @@ public class ClientModeImpl extends StateMachine {
mWifiConfigManager.updateNetworkSelectionStatus(
config.networkId,
DISABLED_NO_INTERNET_TEMPORARY);
+ mBssidBlocklistMonitor.handleBssidConnectionFailure(
+ mLastBssid, config.SSID,
+ BssidBlocklistMonitor.REASON_NETWORK_VALIDATION_FAILURE,
+ mWifiInfo.getRssi());
}
- int rssi = mWifiInfo.getRssi();
- int sufficientRssi = mWifiInjector.getScoringParams()
- .getSufficientRssi(mWifiInfo.getFrequency());
- boolean isLowRssi = rssi < sufficientRssi;
- mBssidBlocklistMonitor.handleBssidConnectionFailure(
- mLastBssid, config.SSID,
- BssidBlocklistMonitor.REASON_NETWORK_VALIDATION_FAILURE,
- isLowRssi);
mWifiScoreCard.noteValidationFailure(mWifiInfo);
}
}
@@ -5484,13 +5482,10 @@ public class ClientModeImpl extends StateMachine {
boolean localGen = message.arg1 == 1;
if (!localGen) { // ignore disconnects initiated by wpa_supplicant.
mWifiScoreCard.noteNonlocalDisconnect(message.arg2);
- int rssi = mWifiInfo.getRssi();
- int sufficientRssi = mWifiInjector.getScoringParams()
- .getSufficientRssi(mWifiInfo.getFrequency());
- boolean isLowRssi = rssi < sufficientRssi;
mBssidBlocklistMonitor.handleBssidConnectionFailure(mWifiInfo.getBSSID(),
mWifiInfo.getSSID(),
- BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT, isLowRssi);
+ BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT,
+ mWifiInfo.getRssi());
}
config = getCurrentWifiConfiguration();
@@ -5695,6 +5690,7 @@ public class ClientModeImpl extends StateMachine {
}
clearNetworkCachedDataIfNeeded(getTargetWifiConfiguration(), message.arg2);
mTargetNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
+ mWifiInfo.reset();
break;
case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
@@ -5825,15 +5821,20 @@ public class ClientModeImpl extends StateMachine {
}
void handleGsmAuthRequest(SimAuthRequestData requestData) {
+ WifiConfiguration requestingWifiConfiguration = null;
if (mTargetWifiConfiguration != null
&& mTargetWifiConfiguration.networkId
== requestData.networkId) {
+ requestingWifiConfiguration = mTargetWifiConfiguration;
logd("id matches targetWifiConfiguration");
} else if (mLastNetworkId != WifiConfiguration.INVALID_NETWORK_ID
&& mLastNetworkId == requestData.networkId) {
+ requestingWifiConfiguration = getCurrentWifiConfiguration();
logd("id matches currentWifiConfiguration");
- } else {
- logd("id does not match targetWifiConfiguration");
+ }
+
+ if (requestingWifiConfiguration == null) {
+ logd("GsmAuthRequest received with null target/current WifiConfiguration.");
return;
}
@@ -5850,15 +5851,15 @@ public class ClientModeImpl extends StateMachine {
* [SRES][Cipher Key Kc]
*/
String response = mWifiCarrierInfoManager
- .getGsmSimAuthResponse(requestData.data, mTargetWifiConfiguration);
+ .getGsmSimAuthResponse(requestData.data, requestingWifiConfiguration);
if (response == null) {
// In case of failure, issue may be due to sim type, retry as No.2 case
response = mWifiCarrierInfoManager
- .getGsmSimpleSimAuthResponse(requestData.data, mTargetWifiConfiguration);
+ .getGsmSimpleSimAuthResponse(requestData.data, requestingWifiConfiguration);
if (response == null) {
// In case of failure, issue may be due to sim type, retry as No.3 case
response = mWifiCarrierInfoManager.getGsmSimpleSimNoLengthAuthResponse(
- requestData.data, mTargetWifiConfiguration);
+ requestData.data, requestingWifiConfiguration);
}
}
if (response == null || response.length() == 0) {
@@ -5871,20 +5872,25 @@ public class ClientModeImpl extends StateMachine {
}
void handle3GAuthRequest(SimAuthRequestData requestData) {
+ WifiConfiguration requestingWifiConfiguration = null;
if (mTargetWifiConfiguration != null
&& mTargetWifiConfiguration.networkId
== requestData.networkId) {
+ requestingWifiConfiguration = mTargetWifiConfiguration;
logd("id matches targetWifiConfiguration");
} else if (mLastNetworkId != WifiConfiguration.INVALID_NETWORK_ID
&& mLastNetworkId == requestData.networkId) {
+ requestingWifiConfiguration = getCurrentWifiConfiguration();
logd("id matches currentWifiConfiguration");
- } else {
- logd("id does not match targetWifiConfiguration");
+ }
+
+ if (requestingWifiConfiguration == null) {
+ logd("3GAuthRequest received with null target/current WifiConfiguration.");
return;
}
SimAuthResponseData response = mWifiCarrierInfoManager
- .get3GAuthResponse(requestData, mTargetWifiConfiguration);
+ .get3GAuthResponse(requestData, requestingWifiConfiguration);
if (response != null) {
mWifiNative.simAuthResponse(
mInterfaceName, response.type, response.response);
@@ -6282,19 +6288,24 @@ public class ClientModeImpl extends StateMachine {
if ((frameData.mBssTmDataFlagsMask
- & MboOceConstants.BTM_DATA_FLAG_MBO_ASSOC_RETRY_DELAY_INCLUDED)
- != 0) {
- long duration = frameData.mBlackListDurationMs;
- mWifiMetrics.incrementSteeringRequestCountIncludingMboAssocRetryDelay();
+ & MboOceConstants.BTM_DATA_FLAG_DISASSOCIATION_IMMINENT) != 0) {
+ long duration = 0;
+ if ((frameData.mBssTmDataFlagsMask
+ & MboOceConstants.BTM_DATA_FLAG_MBO_ASSOC_RETRY_DELAY_INCLUDED) != 0) {
+ mWifiMetrics.incrementSteeringRequestCountIncludingMboAssocRetryDelay();
+ duration = frameData.mBlockListDurationMs;
+ }
if (duration == 0) {
/*
- * When MBO assoc retry delay is set to zero(reserved as per spec),
- * blacklist the BSS for sometime to avoid AP rejecting the re-connect request.
+ * When disassoc imminent bit alone is set or MBO assoc retry delay is
+ * set to zero(reserved as per spec), blocklist the BSS for sometime to
+ * avoid AP rejecting the re-connect request.
*/
- duration = MboOceConstants.DEFAULT_BLACKLIST_DURATION_MS;
+ duration = MboOceConstants.DEFAULT_BLOCKLIST_DURATION_MS;
}
- // Blacklist the current BSS
- mBssidBlocklistMonitor.blockBssidForDurationMs(bssid, ssid, duration);
+ // Blocklist the current BSS
+ mBssidBlocklistMonitor.blockBssidForDurationMs(bssid, ssid, duration,
+ BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_MBO_OCE, 0);
}
if (frameData.mStatus != MboOceConstants.BTM_RESPONSE_STATUS_ACCEPT) {
diff --git a/service/java/com/android/server/wifi/ConnectToNetworkNotificationBuilder.java b/service/java/com/android/server/wifi/ConnectToNetworkNotificationBuilder.java
index 4f7b4e820..053314dc7 100644
--- a/service/java/com/android/server/wifi/ConnectToNetworkNotificationBuilder.java
+++ b/service/java/com/android/server/wifi/ConnectToNetworkNotificationBuilder.java
@@ -16,6 +16,8 @@
package com.android.server.wifi;
+import static android.app.Notification.VISIBILITY_SECRET;
+
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Intent;
@@ -95,6 +97,7 @@ public class ConnectToNetworkNotificationBuilder {
.setContentIntent(getPrivateBroadcast(ACTION_PICK_WIFI_NETWORK, notifierTag))
.addAction(connectAction)
.addAction(allNetworksAction)
+ .setVisibility(VISIBILITY_SECRET)
.build();
}
diff --git a/service/java/com/android/server/wifi/DeviceConfigFacade.java b/service/java/com/android/server/wifi/DeviceConfigFacade.java
index 0b707701f..a7bcfc764 100644
--- a/service/java/com/android/server/wifi/DeviceConfigFacade.java
+++ b/service/java/com/android/server/wifi/DeviceConfigFacade.java
@@ -129,6 +129,19 @@ 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;
+ // Default RSSI threshold in dBm above which low score is not sent to connectivity service
+ // when external scorer takes action.
+ static final int DEFAULT_RSSI_THRESHOLD_NOT_SEND_LOW_SCORE_TO_CS_DBM = -67;
// Cached values of fields updated via updateDeviceConfigFlags()
private boolean mIsAbnormalConnectionBugreportEnabled;
private int mAbnormalConnectionDurationMs;
@@ -177,6 +190,9 @@ public class DeviceConfigFacade {
private int mNonstationaryScanRssiValidTimeMs;
private int mStationaryScanRssiValidTimeMs;
private int mHealthMonitorFwAlertValidTimeMs;
+ private int mMinConfirmationDurationSendLowScoreMs;
+ private int mMinConfirmationDurationSendHighScoreMs;
+ private int mRssiThresholdNotSendLowScoreToCsDbm;
public DeviceConfigFacade(Context context, Handler handler, WifiMetrics wifiMetrics) {
mContext = context;
@@ -324,7 +340,15 @@ 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);
+ mRssiThresholdNotSendLowScoreToCsDbm = DeviceConfig.getInt(NAMESPACE,
+ "rssi_threshold_not_send_low_score_to_cs_dbm",
+ DEFAULT_RSSI_THRESHOLD_NOT_SEND_LOW_SCORE_TO_CS_DBM);
}
private Set<String> getUnmodifiableSetQuoted(String key) {
@@ -673,4 +697,28 @@ 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;
+ }
+
+ /**
+ * Gets the RSSI threshold above which low score is not sent to connectivity service when
+ * external scorer takes action.
+ */
+ public int getRssiThresholdNotSendLowScoreToCsDbm() {
+ return mRssiThresholdNotSendLowScoreToCsDbm;
+ }
}
diff --git a/service/java/com/android/server/wifi/EapFailureNotifier.java b/service/java/com/android/server/wifi/EapFailureNotifier.java
index cdb120321..1d82082a0 100644
--- a/service/java/com/android/server/wifi/EapFailureNotifier.java
+++ b/service/java/com/android/server/wifi/EapFailureNotifier.java
@@ -16,23 +16,29 @@
package com.android.server.wifi;
+import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.graphics.drawable.Icon;
import android.net.wifi.WifiConfiguration;
+import android.os.UserHandle;
import android.provider.Settings;
import android.service.notification.StatusBarNotification;
import android.telephony.SubscriptionManager;
import android.text.TextUtils;
+import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
+import java.util.List;
+
/**
* This class may be used to launch notifications when EAP failure occurs.
*/
@@ -92,13 +98,29 @@ public class EapFailureNotifier {
showNotification(errorMessage, config.SSID);
}
+ private String getSettingsPackageName() {
+ Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
+ List<ResolveInfo> resolveInfos = mContext.getPackageManager().queryIntentActivitiesAsUser(
+ intent, PackageManager.MATCH_SYSTEM_ONLY | PackageManager.MATCH_DEFAULT_ONLY,
+ UserHandle.of(ActivityManager.getCurrentUser()));
+ if (resolveInfos == null || resolveInfos.isEmpty()) {
+ Log.e(TAG, "Failed to resolve wifi settings activity");
+ return null;
+ }
+ // Pick the first one if there are more than 1 since the list is ordered from best to worst.
+ return resolveInfos.get(0).activityInfo.packageName;
+ }
+
/**
* Display eap error notification which defined by carrier.
*
* @param ssid Error Message which defined by carrier
*/
private void showNotification(String errorMessage, String ssid) {
- Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
+ String settingsPackage = getSettingsPackageName();
+ if (settingsPackage == null) return;
+ Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS)
+ .setPackage(settingsPackage);
Notification.Builder builder = mFrameworkFacade.makeNotificationBuilder(mContext,
WifiService.NOTIFICATION_NETWORK_ALERTS)
.setAutoCancel(true)
diff --git a/service/java/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreData.java b/service/java/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreData.java
index 98664d0fc..a9c99ae54 100644
--- a/service/java/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreData.java
+++ b/service/java/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreData.java
@@ -28,6 +28,7 @@ import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -92,6 +93,7 @@ public class ImsiPrivacyProtectionExemptionStoreData implements WifiConfigStore.
throws XmlPullParserException, IOException {
// Ignore empty reads.
if (in == null) {
+ mDataSource.fromDeserialized(Collections.emptyMap());
return;
}
diff --git a/service/java/com/android/server/wifi/MboOceConstants.java b/service/java/com/android/server/wifi/MboOceConstants.java
index 4ef3cab0c..66948b030 100644
--- a/service/java/com/android/server/wifi/MboOceConstants.java
+++ b/service/java/com/android/server/wifi/MboOceConstants.java
@@ -176,7 +176,7 @@ public class MboOceConstants {
@Retention(RetentionPolicy.SOURCE)
@interface MboCellularDataConnectionPreference{}
- /** default Blacklist duration when AP doesn't advertise it */
- public static final long DEFAULT_BLACKLIST_DURATION_MS = 300_000; // 5 minutes
+ /** default Blocklist duration when AP doesn't advertise non zero MBO assoc retry delay */
+ public static final long DEFAULT_BLOCKLIST_DURATION_MS = 300_000; // 5 minutes
}
diff --git a/service/java/com/android/server/wifi/MboOceController.java b/service/java/com/android/server/wifi/MboOceController.java
index 41006371e..d71034d81 100644
--- a/service/java/com/android/server/wifi/MboOceController.java
+++ b/service/java/com/android/server/wifi/MboOceController.java
@@ -130,7 +130,7 @@ public class MboOceController {
public @MboOceConstants.BtmResponseStatus int mStatus =
MboOceConstants.BTM_RESPONSE_STATUS_INVALID;
public int mBssTmDataFlagsMask = 0;
- public long mBlackListDurationMs = 0;
+ public long mBlockListDurationMs = 0;
public @MboOceConstants.MboTransitionReason int mTransitionReason =
MboOceConstants.MBO_TRANSITION_REASON_INVALID;
public @MboOceConstants.MboCellularDataConnectionPreference int mCellPreference =
@@ -140,7 +140,7 @@ public class MboOceController {
public String toString() {
return new StringBuilder("BtmFrameData status=").append(mStatus).append(
", flags=").append(mBssTmDataFlagsMask).append(
- ", assocRetryDelay=").append(mBlackListDurationMs).append(
+ ", assocRetryDelay=").append(mBlockListDurationMs).append(
", transitionReason=").append(mTransitionReason).append(
", cellPref=").append(mCellPreference).toString();
}
diff --git a/service/java/com/android/server/wifi/NetworkSuggestionNominator.java b/service/java/com/android/server/wifi/NetworkSuggestionNominator.java
index b174be5e0..8c901cff9 100644
--- a/service/java/com/android/server/wifi/NetworkSuggestionNominator.java
+++ b/service/java/com/android/server/wifi/NetworkSuggestionNominator.java
@@ -246,6 +246,7 @@ public class NetworkSuggestionNominator implements WifiNetworkSelector.NetworkNo
mLocalLog.log("Failed to add network suggestion");
continue;
}
+ mWifiConfigManager.allowAutojoin(result.getNetworkId(), config.allowAutojoin);
WifiConfiguration currentWCmConfiguredNetwork =
mWifiConfigManager.getConfiguredNetwork(result.netId);
// Try to enable network selection
@@ -276,6 +277,7 @@ public class NetworkSuggestionNominator implements WifiNetworkSelector.NetworkNo
mLocalLog.log("Failed to add network suggestion");
return null;
}
+ mWifiConfigManager.allowAutojoin(result.getNetworkId(), wifiConfiguration.allowAutojoin);
if (!mWifiConfigManager.updateNetworkSelectionStatus(result.getNetworkId(),
WifiConfiguration.NetworkSelectionStatus.DISABLED_NONE)) {
mLocalLog.log("Failed to make network suggestion selectable");
diff --git a/service/java/com/android/server/wifi/ScanRequestProxy.java b/service/java/com/android/server/wifi/ScanRequestProxy.java
index c054b90a4..622fcdab9 100644
--- a/service/java/com/android/server/wifi/ScanRequestProxy.java
+++ b/service/java/com/android/server/wifi/ScanRequestProxy.java
@@ -464,7 +464,8 @@ public class ScanRequestProxy {
* @return the list of results
*/
public List<ScanResult> getScanResults() {
- return mLastScanResults;
+ // return a copy to prevent external modification
+ return new ArrayList<>(mLastScanResults);
}
/**
diff --git a/service/java/com/android/server/wifi/SimRequiredNotifier.java b/service/java/com/android/server/wifi/SimRequiredNotifier.java
index 8e3d22d6a..fed7bd8e2 100644
--- a/service/java/com/android/server/wifi/SimRequiredNotifier.java
+++ b/service/java/com/android/server/wifi/SimRequiredNotifier.java
@@ -16,22 +16,31 @@
package com.android.server.wifi;
+import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.graphics.drawable.Icon;
import android.net.wifi.WifiConfiguration;
+import android.os.UserHandle;
import android.provider.Settings;
+import android.util.Log;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
import com.android.wifi.resources.R;
+
+import java.util.List;
+
/**
* Helper class to generate SIM required notification
*
*/
public class SimRequiredNotifier {
+ private static final String TAG = "SimRequiredNotifier";
private final WifiContext mContext;
private final FrameworkFacade mFrameworkFacade;
private final NotificationManager mNotificationManager;
@@ -53,8 +62,7 @@ public class SimRequiredNotifier {
} else {
name = config.SSID;
}
- mNotificationManager.notify(SystemMessage.NOTE_ID_WIFI_SIM_REQUIRED,
- buildSimRequiredNotification(name, carrier));
+ showNotification(name, carrier);
}
/**
@@ -64,15 +72,33 @@ public class SimRequiredNotifier {
mNotificationManager.cancel(null, SystemMessage.NOTE_ID_WIFI_SIM_REQUIRED);
}
- private Notification buildSimRequiredNotification(String ssid, String carrier) {
+ private String getSettingsPackageName() {
+ Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
+ List<ResolveInfo> resolveInfos = mContext.getPackageManager().queryIntentActivitiesAsUser(
+ intent, PackageManager.MATCH_SYSTEM_ONLY | PackageManager.MATCH_DEFAULT_ONLY,
+ UserHandle.of(ActivityManager.getCurrentUser()));
+ if (resolveInfos == null || resolveInfos.isEmpty()) {
+ Log.e(TAG, "Failed to resolve wifi settings activity");
+ return null;
+ }
+ // Pick the first one if there are more than 1 since the list is ordered from best to worst.
+ return resolveInfos.get(0).activityInfo.packageName;
+ }
+
+ private void showNotification(String ssid, String carrier) {
+ String settingsPackage = getSettingsPackageName();
+ if (settingsPackage == null) return;
+ Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ .setPackage(settingsPackage);
+
String title = mContext.getResources().getString(
R.string.wifi_sim_required_title);
String message = mContext.getResources().getString(
R.string.wifi_sim_required_message,
(ssid == null ? "" : ssid),
(carrier == null ? "" : carrier));
-
- return mFrameworkFacade.makeNotificationBuilder(mContext,
+ Notification.Builder builder = mFrameworkFacade.makeNotificationBuilder(mContext,
WifiService.NOTIFICATION_NETWORK_ALERTS)
.setAutoCancel(true)
.setShowWhen(false)
@@ -85,14 +111,9 @@ public class SimRequiredNotifier {
.setStyle(new Notification.BigTextStyle().bigText(message))
.setSmallIcon(Icon.createWithResource(mContext.getWifiOverlayApkPkgName(),
R.drawable.stat_notify_wifi_in_range))
- .setContentIntent(launchWirelessSettings())
- .build();
- }
-
- private PendingIntent launchWirelessSettings() {
- Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS)
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- return mFrameworkFacade.getActivity(mContext, 0, intent,
- PendingIntent.FLAG_UPDATE_CURRENT);
+ .setContentIntent(mFrameworkFacade.getActivity(
+ mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
+ mNotificationManager.notify(SystemMessage.NOTE_ID_WIFI_SIM_REQUIRED,
+ builder.build());
}
}
diff --git a/service/java/com/android/server/wifi/SoftApManager.java b/service/java/com/android/server/wifi/SoftApManager.java
index 9ef52e796..b321a78a1 100644
--- a/service/java/com/android/server/wifi/SoftApManager.java
+++ b/service/java/com/android/server/wifi/SoftApManager.java
@@ -221,16 +221,7 @@ public class SoftApManager implements ActiveModeManager {
public void stop() {
Log.d(TAG, " currentstate: " + getCurrentStateName());
mTargetRole = ROLE_UNSPECIFIED;
- if (mApInterfaceName != null) {
- if (mIfaceIsUp) {
- updateApState(WifiManager.WIFI_AP_STATE_DISABLING,
- WifiManager.WIFI_AP_STATE_ENABLED, 0);
- } else {
- updateApState(WifiManager.WIFI_AP_STATE_DISABLING,
- WifiManager.WIFI_AP_STATE_ENABLING, 0);
- }
- }
- mStateMachine.quitNow();
+ mStateMachine.sendMessage(SoftApStateMachine.CMD_STOP);
}
@Override
@@ -517,6 +508,7 @@ public class SoftApManager implements ActiveModeManager {
private class SoftApStateMachine extends StateMachine {
// Commands for the state machine.
public static final int CMD_START = 0;
+ public static final int CMD_STOP = 1;
public static final int CMD_FAILURE = 2;
public static final int CMD_INTERFACE_STATUS_CHANGED = 3;
public static final int CMD_ASSOCIATED_STATIONS_CHANGED = 4;
@@ -574,6 +566,9 @@ public class SoftApManager implements ActiveModeManager {
@Override
public boolean processMessage(Message message) {
switch (message.what) {
+ case CMD_STOP:
+ mStateMachine.quitNow();
+ break;
case CMD_START:
mApInterfaceName = mWifiNative.setupInterfaceForSoftApMode(
mWifiNativeInterfaceCallback);
@@ -908,6 +903,16 @@ public class SoftApManager implements ActiveModeManager {
boolean isUp = message.arg1 == 1;
onUpChanged(isUp);
break;
+ case CMD_STOP:
+ if (mIfaceIsUp) {
+ updateApState(WifiManager.WIFI_AP_STATE_DISABLING,
+ WifiManager.WIFI_AP_STATE_ENABLED, 0);
+ } else {
+ updateApState(WifiManager.WIFI_AP_STATE_DISABLING,
+ WifiManager.WIFI_AP_STATE_ENABLING, 0);
+ }
+ transitionTo(mIdleState);
+ break;
case CMD_START:
// Already started, ignore this command.
break;
diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java
index 92ba43b4c..0e2189ba0 100644
--- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java
+++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java
@@ -55,7 +55,8 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
private final String mIfaceName;
private final Object mLock;
private final WifiMonitor mWifiMonitor;
- private boolean mStateIsFourway = false; // Used to help check for PSK password mismatch
+ // Used to help check for PSK password mismatch & EAP connection failure.
+ private int mStateBeforeDisconnect = State.INACTIVE;
SupplicantStaIfaceCallbackImpl(@NonNull SupplicantStaIfaceHal staIfaceHal,
@NonNull String ifaceName,
@@ -151,14 +152,16 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
public void onNetworkRemoved(int id) {
synchronized (mLock) {
mStaIfaceHal.logCallback("onNetworkRemoved");
- // Reset 4way handshake state since network has been removed.
- mStateIsFourway = false;
+ // Reset state since network has been removed.
+ mStateBeforeDisconnect = State.INACTIVE;
}
}
- @Override
- public void onStateChanged(int newState, byte[/* 6 */] bssid, int id,
- ArrayList<Byte> ssid) {
+ /**
+ * Added to plumb the new {@code filsHlpSent} param from the V1.3 callback version.
+ */
+ public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid,
+ boolean filsHlpSent) {
synchronized (mLock) {
mStaIfaceHal.logCallback("onStateChanged");
SupplicantState newSupplicantState =
@@ -166,10 +169,15 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
WifiSsid wifiSsid =
WifiSsid.createFromByteArray(NativeUtil.byteArrayFromArrayList(ssid));
String bssidStr = NativeUtil.macAddressFromByteArray(bssid);
- mStateIsFourway = (newState == ISupplicantStaIfaceCallback.State.FOURWAY_HANDSHAKE);
- if (newSupplicantState == SupplicantState.COMPLETED) {
+ if (newState != State.DISCONNECTED) {
+ // onStateChanged(DISCONNECTED) may come before onDisconnected(), so add this
+ // cache to track the state before the disconnect.
+ mStateBeforeDisconnect = newState;
+ }
+ if (newState == State.COMPLETED) {
mWifiMonitor.broadcastNetworkConnectionEvent(
- mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), bssidStr);
+ mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), filsHlpSent,
+ bssidStr);
}
mWifiMonitor.broadcastSupplicantStateChangeEvent(
mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), wifiSsid,
@@ -178,6 +186,11 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
}
@Override
+ public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid) {
+ onStateChanged(newState, bssid, id, ssid, false);
+ }
+
+ @Override
public void onAnqpQueryDone(byte[/* 6 */] bssid,
ISupplicantStaIfaceCallback.AnqpData data,
ISupplicantStaIfaceCallback.Hs20AnqpData hs20Data) {
@@ -239,14 +252,23 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
synchronized (mLock) {
mStaIfaceHal.logCallback("onDisconnected");
if (mStaIfaceHal.isVerboseLoggingEnabled()) {
- Log.e(TAG, "onDisconnected 4way=" + mStateIsFourway
+ Log.e(TAG, "onDisconnected state=" + mStateBeforeDisconnect
+ " locallyGenerated=" + locallyGenerated
+ " reasonCode=" + reasonCode);
}
- if (mStateIsFourway
- && (!locallyGenerated || reasonCode != ReasonCode.IE_IN_4WAY_DIFFERS)) {
- mWifiMonitor.broadcastAuthenticationFailureEvent(
- mIfaceName, WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD, -1);
+ WifiConfiguration curConfiguration =
+ mStaIfaceHal.getCurrentNetworkLocalConfig(mIfaceName);
+ if (curConfiguration != null) {
+ if (mStateBeforeDisconnect == State.FOURWAY_HANDSHAKE
+ && WifiConfigurationUtil.isConfigForPskNetwork(curConfiguration)
+ && (!locallyGenerated || reasonCode != ReasonCode.IE_IN_4WAY_DIFFERS)) {
+ mWifiMonitor.broadcastAuthenticationFailureEvent(
+ mIfaceName, WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD, -1);
+ } else if (mStateBeforeDisconnect == State.ASSOCIATED
+ && WifiConfigurationUtil.isConfigForEapNetwork(curConfiguration)) {
+ mWifiMonitor.broadcastAuthenticationFailureEvent(
+ mIfaceName, WifiManager.ERROR_AUTH_FAILURE_EAP_FAILURE, -1);
+ }
}
mWifiMonitor.broadcastNetworkDisconnectionEvent(
mIfaceName, locallyGenerated ? 1 : 0, reasonCode,
@@ -261,7 +283,6 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac
boolean isWrongPwd = false;
WifiConfiguration curConfiguration =
mStaIfaceHal.getCurrentNetworkLocalConfig(mIfaceName);
-
if (curConfiguration != null) {
if (!timedOut) {
Log.d(TAG, "flush PMK cache due to association rejection for config id "
diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_1Impl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_1Impl.java
index 12e025e69..c4a3dda16 100644
--- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_1Impl.java
+++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_1Impl.java
@@ -53,10 +53,18 @@ abstract class SupplicantStaIfaceCallbackV1_1Impl extends
mCallbackV10.onNetworkRemoved(id);
}
+ /**
+ * Added to plumb the new {@code filsHlpSent} param from the V1.3 callback version.
+ */
+ public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid,
+ boolean filsHlpSent) {
+ mCallbackV10.onStateChanged(newState, bssid, id, ssid, filsHlpSent);
+ }
+
@Override
public void onStateChanged(int newState, byte[/* 6 */] bssid, int id,
ArrayList<Byte> ssid) {
- mCallbackV10.onStateChanged(newState, bssid, id, ssid);
+ onStateChanged(newState, bssid, id, ssid, false);
}
@Override
diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_2Impl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_2Impl.java
index 89e66d22c..973e11a4a 100644
--- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_2Impl.java
+++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_2Impl.java
@@ -59,10 +59,18 @@ abstract class SupplicantStaIfaceCallbackV1_2Impl extends
mCallbackV11.onNetworkRemoved(id);
}
+ /**
+ * Added to plumb the new {@code filsHlpSent} param from the V1.3 callback version.
+ */
+ public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid,
+ boolean filsHlpSent) {
+ mCallbackV11.onStateChanged(newState, bssid, id, ssid, filsHlpSent);
+ }
+
@Override
public void onStateChanged(int newState, byte[/* 6 */] bssid, int id,
ArrayList<Byte> ssid) {
- mCallbackV11.onStateChanged(newState, bssid, id, ssid);
+ onStateChanged(newState, bssid, id, ssid, false);
}
@Override
diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_3Impl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_3Impl.java
index 596b56d57..154fde40b 100644
--- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_3Impl.java
+++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_3Impl.java
@@ -15,19 +15,13 @@
*/
package com.android.server.wifi;
-import static com.android.server.wifi.SupplicantStaIfaceCallbackImpl.supplicantHidlStateToFrameworkState;
import android.annotation.NonNull;
import android.hardware.wifi.supplicant.V1_0.ISupplicantStaIfaceCallback;
-import android.hardware.wifi.supplicant.V1_3.ISupplicantStaIfaceCallback.BssTmData;
-import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
-import android.net.wifi.WifiSsid;
import android.util.Log;
-import com.android.server.wifi.util.NativeUtil;
-
import java.util.ArrayList;
abstract class SupplicantStaIfaceCallbackV1_3Impl extends
@@ -37,7 +31,6 @@ abstract class SupplicantStaIfaceCallbackV1_3Impl extends
private final String mIfaceName;
private final WifiMonitor mWifiMonitor;
private final SupplicantStaIfaceHal.SupplicantStaIfaceHalCallbackV1_2 mCallbackV12;
- private boolean mStateIsFourwayV13 = false; // Used to help check for PSK password mismatch
SupplicantStaIfaceCallbackV1_3Impl(@NonNull SupplicantStaIfaceHal staIfaceHal,
@NonNull String ifaceName,
@@ -57,9 +50,7 @@ abstract class SupplicantStaIfaceCallbackV1_3Impl extends
@Override
public void onNetworkRemoved(int id) {
- mStaIfaceHal.logCallback("onNetworkRemoved");
- // Reset 4way handshake state since network has been removed.
- mStateIsFourwayV13 = false;
+ mCallbackV12.onNetworkRemoved(id);
}
@Override
@@ -96,20 +87,7 @@ abstract class SupplicantStaIfaceCallbackV1_3Impl extends
@Override
public void onDisconnected(byte[/* 6 */] bssid, boolean locallyGenerated,
int reasonCode) {
- mStaIfaceHal.logCallback("onDisconnected");
- if (mStaIfaceHal.isVerboseLoggingEnabled()) {
- Log.e(TAG, "onDisconnected 4way=" + mStateIsFourwayV13
- + " locallyGenerated=" + locallyGenerated
- + " reasonCode=" + reasonCode);
- }
- if (mStateIsFourwayV13
- && (!locallyGenerated || reasonCode != ReasonCode.IE_IN_4WAY_DIFFERS)) {
- mWifiMonitor.broadcastAuthenticationFailureEvent(
- mIfaceName, WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD, -1);
- }
- mWifiMonitor.broadcastNetworkDisconnectionEvent(
- mIfaceName, locallyGenerated ? 1 : 0, reasonCode,
- NativeUtil.macAddressFromByteArray(bssid));
+ mCallbackV12.onDisconnected(bssid, locallyGenerated, reasonCode);
}
@Override
@@ -252,7 +230,7 @@ abstract class SupplicantStaIfaceCallbackV1_3Impl extends
btmFrmData.mStatus = halToFrameworkBtmResponseStatus(tmData.status);
btmFrmData.mBssTmDataFlagsMask = halToFrameworkBssTmDataFlagsMask(tmData.flags);
- btmFrmData.mBlackListDurationMs = tmData.assocRetryDelayMs;
+ btmFrmData.mBlockListDurationMs = tmData.assocRetryDelayMs;
if ((tmData.flags & BssTmDataFlagsMask.MBO_TRANSITION_REASON_CODE_INCLUDED) != 0) {
btmFrmData.mTransitionReason = halToFrameworkMboTransitionReason(
tmData.mboTransitionReason);
@@ -365,25 +343,6 @@ abstract class SupplicantStaIfaceCallbackV1_3Impl extends
@Override
public void onStateChanged_1_3(int newState, byte[/* 6 */] bssid, int id,
ArrayList<Byte> ssid, boolean filsHlpSent) {
- mStaIfaceHal.logCallback("onStateChanged_1_3");
- SupplicantState newSupplicantState =
- supplicantHidlStateToFrameworkState(newState);
- WifiSsid wifiSsid =
- WifiSsid.createFromByteArray(NativeUtil.byteArrayFromArrayList(ssid));
- String bssidStr = NativeUtil.macAddressFromByteArray(bssid);
- mStateIsFourwayV13 =
- (newState == ISupplicantStaIfaceCallback.State.FOURWAY_HANDSHAKE);
- if (newSupplicantState == SupplicantState.COMPLETED) {
- if (filsHlpSent) {
- mWifiMonitor.broadcastFilsNetworkConnectionEvent(
- mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), bssidStr);
- } else {
- mWifiMonitor.broadcastNetworkConnectionEvent(
- mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), bssidStr);
- }
- }
- mWifiMonitor.broadcastSupplicantStateChangeEvent(
- mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName),
- wifiSsid, bssidStr, newSupplicantState);
+ mCallbackV12.onStateChanged(newState, bssid, id, ssid, filsHlpSent);
}
}
diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java b/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java
index 657b081dd..b587eed38 100644
--- a/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java
+++ b/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java
@@ -527,6 +527,10 @@ public class SupplicantStaIfaceHal {
Log.e(TAG, "ISupplicant.addInterface exception: " + e);
handleNoSuchElementException(e, "addInterface");
return null;
+ } catch (IllegalArgumentException e) {
+ handleIllegalArgumentException(e, "addInterface");
+ Log.e(TAG, "ISupplicant.addInterface exception: " + e);
+ return null;
}
return supplicantIface.value;
}
@@ -2556,7 +2560,7 @@ public class SupplicantStaIfaceHal {
private boolean checkStatusAndLogFailure(SupplicantStatus status,
final String methodStr) {
synchronized (mLock) {
- if (status.code != SupplicantStatusCode.SUCCESS) {
+ if (status == null || status.code != SupplicantStatusCode.SUCCESS) {
Log.e(TAG, "ISupplicantStaIface." + methodStr + " failed: " + status);
return false;
} else {
@@ -2593,6 +2597,13 @@ public class SupplicantStaIfaceHal {
}
}
+ private void handleIllegalArgumentException(IllegalArgumentException e, String methodStr) {
+ synchronized (mLock) {
+ clearState();
+ Log.e(TAG, "ISupplicantStaIface." + methodStr + " failed with exception", e);
+ }
+ }
+
/**
* Converts the Wps config method string to the equivalent enum value.
*/
diff --git a/service/java/com/android/server/wifi/WifiCarrierInfoManager.java b/service/java/com/android/server/wifi/WifiCarrierInfoManager.java
index d483047d2..047f9139d 100644
--- a/service/java/com/android/server/wifi/WifiCarrierInfoManager.java
+++ b/service/java/com/android/server/wifi/WifiCarrierInfoManager.java
@@ -16,6 +16,8 @@
package com.android.server.wifi;
+import static android.Manifest.permission.NETWORK_SETTINGS;
+
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.app.AlertDialog;
@@ -96,6 +98,10 @@ public class WifiCarrierInfoManager {
@VisibleForTesting
public static final String NOTIFICATION_USER_DISMISSED_INTENT_ACTION =
"com.android.server.wifi.action.CarrierNetwork.USER_DISMISSED";
+ /** Intent when user clicked on the notification. */
+ @VisibleForTesting
+ public static final String NOTIFICATION_USER_CLICKED_INTENT_ACTION =
+ "com.android.server.wifi.action.CarrierNetwork.USER_CLICKED";
@VisibleForTesting
public static final String EXTRA_CARRIER_NAME =
"com.android.server.wifi.extra.CarrierNetwork.CARRIER_NAME";
@@ -223,14 +229,16 @@ public class WifiCarrierInfoManager {
switch (intent.getAction()) {
case NOTIFICATION_USER_ALLOWED_CARRIER_INTENT_ACTION:
- Log.i(TAG, "User clicked to allow carrier");
- sendImsiPrivacyConfirmationDialog(carrierName, carrierId);
- // Collapse the notification bar
- mContext.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+ handleUserAllowCarrierExemptionAction(carrierName, carrierId);
break;
case NOTIFICATION_USER_DISALLOWED_CARRIER_INTENT_ACTION:
handleUserDisallowCarrierExemptionAction(carrierName, carrierId);
break;
+ case NOTIFICATION_USER_CLICKED_INTENT_ACTION:
+ sendImsiPrivacyConfirmationDialog(carrierName, carrierId);
+ // Collapse the notification bar
+ mContext.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+ break;
case NOTIFICATION_USER_DISMISSED_INTENT_ACTION:
handleUserDismissAction();
return; // no need to cancel a dismissed notification, return.
@@ -297,8 +305,9 @@ public class WifiCarrierInfoManager {
mIntentFilter.addAction(NOTIFICATION_USER_DISMISSED_INTENT_ACTION);
mIntentFilter.addAction(NOTIFICATION_USER_ALLOWED_CARRIER_INTENT_ACTION);
mIntentFilter.addAction(NOTIFICATION_USER_DISALLOWED_CARRIER_INTENT_ACTION);
+ mIntentFilter.addAction(NOTIFICATION_USER_CLICKED_INTENT_ACTION);
- mContext.registerReceiver(mBroadcastReceiver, mIntentFilter, null, handler);
+ mContext.registerReceiver(mBroadcastReceiver, mIntentFilter, NETWORK_SETTINGS, handler);
configStore.registerStoreData(wifiInjector.makeImsiProtectionExemptionStoreData(
new ImsiProtectionExemptionDataSource()));
@@ -1448,6 +1457,9 @@ public class WifiCarrierInfoManager {
.setStyle(new Notification.BigTextStyle()
.bigText(mResources.getString(
R.string.wifi_suggestion_imsi_privacy_content)))
+ .setContentIntent(getPrivateBroadcast(NOTIFICATION_USER_CLICKED_INTENT_ACTION,
+ Pair.create(EXTRA_CARRIER_NAME, carrierName),
+ Pair.create(EXTRA_CARRIER_ID, carrierId)))
.setDeleteIntent(getPrivateBroadcast(NOTIFICATION_USER_DISMISSED_INTENT_ACTION,
Pair.create(EXTRA_CARRIER_NAME, carrierName),
Pair.create(EXTRA_CARRIER_ID, carrierId)))
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java
index c0cb899d2..8fc91cb09 100644
--- a/service/java/com/android/server/wifi/WifiConfigManager.java
+++ b/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -1106,7 +1106,6 @@ public class WifiConfigManager {
newInternalConfig.noInternetAccessExpected = externalConfig.noInternetAccessExpected;
newInternalConfig.ephemeral = externalConfig.ephemeral;
newInternalConfig.osu = externalConfig.osu;
- newInternalConfig.trusted = externalConfig.trusted;
newInternalConfig.fromWifiNetworkSuggestion = externalConfig.fromWifiNetworkSuggestion;
newInternalConfig.fromWifiNetworkSpecifier = externalConfig.fromWifiNetworkSpecifier;
newInternalConfig.useExternalScores = externalConfig.useExternalScores;
@@ -1775,7 +1774,7 @@ public class WifiConfigManager {
int disableReason = networkStatus.getNetworkSelectionDisableReason();
int blockedBssids = Math.min(MAX_BLOCKED_BSSID_PER_NETWORK,
mWifiInjector.getBssidBlocklistMonitor()
- .getNumBlockedBssidsForSsid(config.SSID));
+ .updateAndGetNumBlockedBssidsForSsid(config.SSID));
// if no BSSIDs are blocked then we should keep trying to connect to something
long disableTimeoutMs = 0;
if (blockedBssids > 0) {
@@ -2902,14 +2901,22 @@ public class WifiConfigManager {
// Remove any private networks of the old user before switching the userId.
for (WifiConfiguration config : getConfiguredNetworks()) {
if ((!config.shared && !mWifiPermissionsUtil
- .doesUidBelongToCurrentUser(config.creatorUid))) {
+ .doesUidBelongToCurrentUser(config.creatorUid))
+ || config.ephemeral) {
removedNetworkIds.add(config.networkId);
localLog("clearInternalUserData: removed config."
+ " netId=" + config.networkId
+ " configKey=" + config.getKey());
mConfiguredNetworks.remove(config.networkId);
+ for (OnNetworkUpdateListener listener : mListeners) {
+ listener.onNetworkRemoved(
+ createExternalWifiConfiguration(config, true, Process.WIFI_UID));
+ }
}
}
+ if (!removedNetworkIds.isEmpty()) {
+ sendConfiguredNetworkChangedBroadcast(WifiManager.CHANGE_REASON_REMOVED);
+ }
mUserTemporarilyDisabledList.clear();
mScanDetailCaches.clear();
clearLastSelectedNetwork();
diff --git a/service/java/com/android/server/wifi/WifiConfigurationUtil.java b/service/java/com/android/server/wifi/WifiConfigurationUtil.java
index e5fda6774..336d97810 100644
--- a/service/java/com/android/server/wifi/WifiConfigurationUtil.java
+++ b/service/java/com/android/server/wifi/WifiConfigurationUtil.java
@@ -224,6 +224,11 @@ public class WifiConfigurationUtil {
if (existingEnterpriseConfig.getEapMethod() != newEnterpriseConfig.getEapMethod()) {
return true;
}
+ if (existingEnterpriseConfig.isAuthenticationSimBased()) {
+ // No other credential changes for SIM based methods.
+ // The SIM card is the credential.
+ return false;
+ }
if (existingEnterpriseConfig.getPhase2Method()
!= newEnterpriseConfig.getPhase2Method()) {
return true;
@@ -232,8 +237,7 @@ public class WifiConfigurationUtil {
newEnterpriseConfig.getIdentity())) {
return true;
}
- if (!existingEnterpriseConfig.isAuthenticationSimBased()
- && !TextUtils.equals(existingEnterpriseConfig.getAnonymousIdentity(),
+ if (!TextUtils.equals(existingEnterpriseConfig.getAnonymousIdentity(),
newEnterpriseConfig.getAnonymousIdentity())) {
return true;
}
@@ -246,6 +250,21 @@ public class WifiConfigurationUtil {
if (!Arrays.equals(existingCaCerts, newCaCerts)) {
return true;
}
+ if (!Arrays.equals(newEnterpriseConfig.getCaCertificateAliases(),
+ existingEnterpriseConfig.getCaCertificateAliases())) {
+ return true;
+ }
+ if (!TextUtils.equals(newEnterpriseConfig.getClientCertificateAlias(),
+ existingEnterpriseConfig.getClientCertificateAlias())) {
+ return true;
+ }
+ if (!TextUtils.equals(newEnterpriseConfig.getAltSubjectMatch(),
+ existingEnterpriseConfig.getAltSubjectMatch())) {
+ return true;
+ }
+ if (newEnterpriseConfig.getOcsp() != existingEnterpriseConfig.getOcsp()) {
+ return true;
+ }
} else {
// One of the configs may have an enterpriseConfig
if (existingEnterpriseConfig != null || newEnterpriseConfig != null) {
@@ -307,6 +326,9 @@ public class WifiConfigurationUtil {
if (existingConfig.requirePmf != newConfig.requirePmf) {
return true;
}
+ if (existingConfig.carrierId != newConfig.carrierId) {
+ return true;
+ }
if (hasEnterpriseConfigChanged(existingConfig.enterpriseConfig,
newConfig.enterpriseConfig)) {
return true;
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java
index 2ce0bc024..6413f9711 100644
--- a/service/java/com/android/server/wifi/WifiConnectivityManager.java
+++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java
@@ -23,6 +23,7 @@ import android.annotation.NonNull;
import android.app.AlarmManager;
import android.content.Context;
import android.net.MacAddress;
+import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.ScanResult;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration;
@@ -160,6 +161,7 @@ public class WifiConnectivityManager {
private boolean mAutoJoinEnabled = false; // disabled by default, enabled by external triggers
private boolean mRunning = false;
private boolean mScreenOn = false;
+ private int mMiracastMode = WifiP2pManager.MIRACAST_DISABLED;
private int mWifiState = WIFI_STATE_UNKNOWN;
private int mInitialScanState = INITIAL_SCAN_STATE_COMPLETE;
private boolean mAutoJoinEnabledExternal = true; // enabled by default
@@ -175,6 +177,7 @@ public class WifiConnectivityManager {
private boolean mPnoScanStarted = false;
private boolean mPeriodicScanTimerSet = false;
private boolean mDelayedPartialScanTimerSet = false;
+ private boolean mWatchdogScanTimerSet = false;
// Used for Initial Scan metrics
private boolean mFailedInitialPartialScan = false;
@@ -304,7 +307,9 @@ public class WifiConnectivityManager {
updateUserDisabledList(scanDetails);
// Check if any blocklisted BSSIDs can be freed.
- Set<String> bssidBlocklist = mBssidBlocklistMonitor.updateAndGetBssidBlocklist();
+ mBssidBlocklistMonitor.tryEnablingBlockedBssids(scanDetails);
+ Set<String> bssidBlocklist = mBssidBlocklistMonitor.updateAndGetBssidBlocklistForSsid(
+ mWifiInfo.getSSID());
if (mStateMachine.isSupplicantTransientState()) {
localLog(listenerName
@@ -1253,6 +1258,17 @@ public class WifiConnectivityManager {
// Start a single scan
private void startForcedSingleScan(boolean isFullBandScan, WorkSource workSource) {
+ // Any scans will impact wifi performance including WFD performance,
+ // So at least ignore scans triggered internally by ConnectivityManager
+ // when WFD session is active. We still allow connectivity scans initiated
+ // by other work source.
+ if (WIFI_WORK_SOURCE.equals(workSource) &&
+ (mMiracastMode == WifiP2pManager.MIRACAST_SOURCE ||
+ mMiracastMode == WifiP2pManager.MIRACAST_SINK)) {
+ localLog("Ignore connectivity scan, MiracastMode:" + mMiracastMode);
+ return;
+ }
+
mPnoScanListener.resetLowRssiNetworkRetryDelay();
ScanSettings settings = new ScanSettings();
@@ -1464,6 +1480,15 @@ public class WifiConnectivityManager {
mClock.getElapsedSinceBootMillis() + WATCHDOG_INTERVAL_MS,
WATCHDOG_TIMER_TAG,
mWatchdogListener, mEventHandler);
+ mWatchdogScanTimerSet = true;
+ }
+
+ // Cancel the watchdog scan timer.
+ private void cancelWatchdogScan() {
+ if (mWatchdogScanTimerSet) {
+ mAlarmManager.cancel(mWatchdogListener);
+ mWatchdogScanTimerSet = false;
+ }
}
// Schedules a delayed partial scan, which will scan the frequencies in mCachedWifiCandidates.
@@ -1584,6 +1609,15 @@ public class WifiConnectivityManager {
}
/**
+ * Save current miracast mode, it will be used to ignore
+ * connectivity scan during the time when miracast is enabled.
+ */
+ public void saveMiracastMode(int mode) {
+ localLog("saveMiracastMode: mode=" + mode);
+ mMiracastMode = mode;
+ }
+
+ /**
* Helper function that converts the WIFI_STATE_XXX constants to string
*/
private static String stateToString(int state) {
@@ -1758,7 +1792,8 @@ public class WifiConnectivityManager {
// Make sure that the failed BSSID is blocked for at least TEMP_BSSID_BLOCK_DURATION
// to prevent the supplicant from trying it again.
mBssidBlocklistMonitor.blockBssidForDurationMs(bssid, ssid,
- TEMP_BSSID_BLOCK_DURATION);
+ TEMP_BSSID_BLOCK_DURATION,
+ BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT, 0);
connectToNetwork(candidate);
}
} catch (IllegalArgumentException e) {
@@ -1890,6 +1925,7 @@ public class WifiConnectivityManager {
if (!mRunning) return;
mRunning = false;
stopConnectivityScan();
+ cancelWatchdogScan();
resetLastPeriodicSingleScanTimeStamp();
mOpenNetworkNotifier.clearPendingNotification(true /* resetRepeatDelay */);
mLastConnectionAttemptBssid = null;
diff --git a/service/java/com/android/server/wifi/WifiDiagnostics.java b/service/java/com/android/server/wifi/WifiDiagnostics.java
index 6fc75c6ea..38045625e 100644
--- a/service/java/com/android/server/wifi/WifiDiagnostics.java
+++ b/service/java/com/android/server/wifi/WifiDiagnostics.java
@@ -226,6 +226,10 @@ class WifiDiagnostics extends BaseWifiDiagnostics {
if (!mActiveInterfaces.isEmpty()) {
return;
}
+ if (mLogLevel != VERBOSE_NO_LOG) {
+ stopLoggingAllBuffers();
+ mRingBuffers = null;
+ }
if (mIsLoggingEventHandlerRegistered) {
if (!mWifiNative.resetLogHandler()) {
mLog.wC("Fail to reset log handler");
@@ -236,10 +240,6 @@ class WifiDiagnostics extends BaseWifiDiagnostics {
// the log handler is in an indeterminate state.
mIsLoggingEventHandlerRegistered = false;
}
- if (mLogLevel != VERBOSE_NO_LOG) {
- stopLoggingAllBuffers();
- mRingBuffers = null;
- }
}
@Override
diff --git a/service/java/com/android/server/wifi/WifiHealthMonitor.java b/service/java/com/android/server/wifi/WifiHealthMonitor.java
index bc1f9af01..b21ea516d 100644
--- a/service/java/com/android/server/wifi/WifiHealthMonitor.java
+++ b/service/java/com/android/server/wifi/WifiHealthMonitor.java
@@ -24,6 +24,7 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.app.AlarmManager;
import android.content.Context;
+import android.content.pm.ModuleInfo;
import android.content.pm.PackageManager;
import android.net.MacAddress;
import android.net.wifi.ScanResult;
@@ -76,7 +77,7 @@ public class WifiHealthMonitor {
"WifiHealthMonitor Schedule Post-Boot Detection Timer";
// Package name of WiFi mainline module found from the following adb command
// adb shell pm list packages --apex-only| grep wifi
- private static final String WIFI_APK_PACKAGE_NAME = "com.google.android.wifi";
+ private static final String WIFI_APEX_NAME = "com.android.wifi";
private static final String SYSTEM_INFO_DATA_NAME = "systemInfoData";
// The time that device waits after device boot before triggering post-boot detection.
// This needs be long enough so that memory read can complete before post-boot detection.
@@ -329,8 +330,20 @@ public class WifiHealthMonitor {
* @Return a non-zero value if version code is available, 0 otherwise.
*/
public long getWifiStackVersion() {
- WifiSoftwareBuildInfo currentBuild = getWifiSystemInfoStats().getCurrSoftwareBuildInfo();
- return (currentBuild == null) ? 0 : currentBuild.getWifiStackVersion();
+ PackageManager packageManager = mContext.getPackageManager();
+ long wifiStackVersion = 0;
+ try {
+ ModuleInfo wifiModule = packageManager.getModuleInfo(
+ WIFI_APEX_NAME, PackageManager.MODULE_APEX_NAME);
+ String wifiPackageName = wifiModule.getPackageName();
+ if (wifiPackageName != null) {
+ wifiStackVersion = packageManager.getPackageInfo(
+ wifiPackageName, PackageManager.MATCH_APEX).getLongVersionCode();
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(TAG, " Hit PackageManager exception", e);
+ }
+ return wifiStackVersion;
}
private synchronized void dailyDetectionHandler() {
@@ -539,14 +552,7 @@ public class WifiHealthMonitor {
if (!mWifiEnabled) {
return null;
}
- PackageManager packageManager = mContext.getPackageManager();
- long wifiStackVersion = 0;
- try {
- wifiStackVersion = packageManager.getPackageInfo(
- WIFI_APK_PACKAGE_NAME, PackageManager.MATCH_APEX).getLongVersionCode();
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(TAG, " Hit PackageManager exception", e);
- }
+ long wifiStackVersion = getWifiStackVersion();
String osBuildVersion = replaceNullByEmptyString(Build.DISPLAY);
if (mWifiNative == null) {
return null;
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java
index 5531c4e98..2bfafc02a 100644
--- a/service/java/com/android/server/wifi/WifiInjector.java
+++ b/service/java/com/android/server/wifi/WifiInjector.java
@@ -106,6 +106,7 @@ public class WifiInjector {
private final ScoringParams mScoringParams;
private final ClientModeImpl mClientModeImpl;
private final ActiveModeWarden mActiveModeWarden;
+ private final WifiStaStateNotifier mWifiStaStateNotifier;
private final WifiSettingsStore mSettingsStore;
private OpenNetworkNotifier mOpenNetworkNotifier;
private final WifiLockManager mLockManager;
@@ -192,6 +193,7 @@ public class WifiInjector {
mFrameworkFacade = new FrameworkFacade();
mMacAddressUtil = new MacAddressUtil();
mContext = context;
+ mScoringParams = new ScoringParams(mContext);
mSettingsMigrationDataHolder = new SettingsMigrationDataHolder(mContext);
mConnectionFailureNotificationBuilder = new ConnectionFailureNotificationBuilder(
mContext, getWifiStackPackageName(), mFrameworkFacade);
@@ -284,7 +286,6 @@ public class WifiInjector {
mWifiConnectivityHelper = new WifiConnectivityHelper(mWifiNative);
mConnectivityLocalLog = new LocalLog(
mContext.getSystemService(ActivityManager.class).isLowRamDevice() ? 256 : 512);
- mScoringParams = new ScoringParams(mContext);
mWifiMetrics.setScoringParams(mScoringParams);
mThroughputPredictor = new ThroughputPredictor(mContext);
mWifiNetworkSelector = new WifiNetworkSelector(mContext, mWifiScoreCard, mScoringParams,
@@ -305,7 +306,7 @@ public class WifiInjector {
mPasspointManager = new PasspointManager(mContext, this,
wifiHandler, mWifiNative, mWifiKeyStore, mClock, new PasspointObjectFactory(),
mWifiConfigManager, mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager,
- mWifiPermissionsUtil);
+ mMacAddressUtil, mWifiPermissionsUtil);
PasspointNetworkNominateHelper nominateHelper =
new PasspointNetworkNominateHelper(mPasspointManager, mWifiConfigManager,
mConnectivityLocalLog);
@@ -382,6 +383,8 @@ public class WifiInjector {
mWifiNetworkSelector.registerNetworkNominator(mNetworkSuggestionNominator);
mWifiNetworkSelector.registerNetworkNominator(mScoredNetworkNominator);
+ mWifiStaStateNotifier = new WifiStaStateNotifier(wifiLooper, this);
+
mClientModeImpl.start();
}
@@ -479,6 +482,10 @@ public class WifiInjector {
return mActiveModeWarden;
}
+ public WifiStaStateNotifier getWifiStaStateNotifier() {
+ return mWifiStaStateNotifier;
+ }
+
public WifiSettingsStore getWifiSettingsStore() {
return mSettingsStore;
}
@@ -616,7 +623,8 @@ public class WifiInjector {
mWifiMetrics, clientModeImpl, mWifiHandlerThread.getLooper(), mDeviceConfigFacade,
mWifiThreadRunner);
mBssidBlocklistMonitor = new BssidBlocklistMonitor(mContext, mWifiConnectivityHelper,
- mWifiLastResortWatchdog, mClock, mConnectivityLocalLog, mWifiScoreCard);
+ mWifiLastResortWatchdog, mClock, mConnectivityLocalLog, mWifiScoreCard,
+ mScoringParams);
mWifiMetrics.setBssidBlocklistMonitor(mBssidBlocklistMonitor);
mWifiChannelUtilizationScan = new WifiChannelUtilization(mClock, mContext);
return new WifiConnectivityManager(mContext, getScoringParams(),
diff --git a/service/java/com/android/server/wifi/WifiKeyStore.java b/service/java/com/android/server/wifi/WifiKeyStore.java
index 70daa0d55..c248d2269 100644
--- a/service/java/com/android/server/wifi/WifiKeyStore.java
+++ b/service/java/com/android/server/wifi/WifiKeyStore.java
@@ -30,6 +30,7 @@ import com.android.server.wifi.util.ArrayUtils;
import java.security.Key;
import java.security.KeyStore;
import java.security.KeyStoreException;
+import java.security.Principal;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
@@ -276,52 +277,110 @@ public class WifiKeyStore {
// For WPA3-Enterprise 192-bit networks, set the SuiteBCipher field based on the
// CA certificate type. Suite-B requires SHA384, reject other certs.
if (config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.SUITE_B_192)) {
- // Read the first CA certificate, and initialize
- Certificate caCert = null;
+ // Read the CA certificates, and initialize
+ String[] caAliases = config.enterpriseConfig.getCaCertificateAliases();
+
+ if (caAliases == null || caAliases.length == 0) {
+ Log.e(TAG, "No CA aliases in profile");
+ return false;
+ }
+
+ int caCertType = -1;
+ int prevCaCertType = -1;
+ for (String caAlias : caAliases) {
+ Certificate caCert = null;
+ try {
+ caCert = mKeyStore.getCertificate(caAlias);
+ } catch (KeyStoreException e) {
+ Log.e(TAG, "Failed to get Suite-B certificate", e);
+ }
+ if (caCert == null || !(caCert instanceof X509Certificate)) {
+ Log.e(TAG, "Failed reading CA certificate for Suite-B");
+ return false;
+ }
+
+ // Confirm that the CA certificate is compatible with Suite-B requirements
+ caCertType = getSuiteBCipherFromCert((X509Certificate) caCert);
+ if (caCertType < 0) {
+ return false;
+ }
+ if (prevCaCertType != -1) {
+ if (prevCaCertType != caCertType) {
+ Log.e(TAG, "Incompatible CA certificates");
+ return false;
+ }
+ }
+ prevCaCertType = caCertType;
+ }
+
+ Certificate clientCert = null;
try {
- caCert = mKeyStore.getCertificate(config.enterpriseConfig.getCaCertificateAlias());
+ clientCert = mKeyStore.getCertificate(config.enterpriseConfig
+ .getClientCertificateAlias());
} catch (KeyStoreException e) {
- Log.e(TAG, "Failed to get Suite-B certificate", e);
+ Log.e(TAG, "Failed to get Suite-B client certificate", e);
}
- if (caCert == null || !(caCert instanceof X509Certificate)) {
- Log.e(TAG, "Failed reading CA certificate for Suite-B");
+ if (clientCert == null || !(clientCert instanceof X509Certificate)) {
+ Log.e(TAG, "Failed reading client certificate for Suite-B");
return false;
}
- X509Certificate x509CaCert = (X509Certificate) caCert;
- String sigAlgOid = x509CaCert.getSigAlgOID();
- if (mVerboseLoggingEnabled) {
- Log.d(TAG, "Signature algorithm: " + sigAlgOid);
+
+ int clientCertType = getSuiteBCipherFromCert((X509Certificate) clientCert);
+ if (clientCertType < 0) {
+ return false;
}
- config.allowedSuiteBCiphers.clear();
- // Wi-Fi alliance requires the use of both ECDSA secp384r1 and RSA 3072 certificates
- // in WPA3-Enterprise 192-bit security networks, which are also known as Suite-B-192
- // networks, even though NSA Suite-B-192 mandates ECDSA only. The use of the term
- // Suite-B was already coined in the IEEE 802.11-2016 specification for
- // AKM 00-0F-AC but the test plan for WPA3-Enterprise 192-bit for APs mandates
- // support for both RSA and ECDSA, and for STAs it mandates ECDSA and optionally
- // RSA. In order to be compatible with all WPA3-Enterprise 192-bit deployments,
- // we are supporting both types here.
- if (sigAlgOid.equals("1.2.840.113549.1.1.12")) {
- // sha384WithRSAEncryption
- config.allowedSuiteBCiphers.set(
- WifiConfiguration.SuiteBCipher.ECDHE_RSA);
- if (mVerboseLoggingEnabled) {
- Log.d(TAG, "Selecting Suite-B RSA");
- }
- } else if (sigAlgOid.equals("1.2.840.10045.4.3.3")) {
- // ecdsa-with-SHA384
- config.allowedSuiteBCiphers.set(
- WifiConfiguration.SuiteBCipher.ECDHE_ECDSA);
- if (mVerboseLoggingEnabled) {
- Log.d(TAG, "Selecting Suite-B ECDSA");
- }
+ if (clientCertType == caCertType) {
+ config.allowedSuiteBCiphers.clear();
+ config.allowedSuiteBCiphers.set(clientCertType);
} else {
- Log.e(TAG, "Invalid CA certificate type for Suite-B: "
- + sigAlgOid);
+ Log.e(TAG, "Client certificate for Suite-B is incompatible with the CA "
+ + "certificate");
return false;
}
}
return true;
}
+
+ /**
+ * Get the Suite-B cipher from the certificate
+ *
+ * @param x509Certificate Certificate to process
+ * @return WifiConfiguration.SuiteBCipher.ECDHE_RSA if the certificate OID matches the Suite-B
+ * requirements for RSA certificates, WifiConfiguration.SuiteBCipher.ECDHE_ECDSA if the
+ * certificate OID matches the Suite-B requirements for ECDSA certificates, or -1 otherwise.
+ */
+ private int getSuiteBCipherFromCert(X509Certificate x509Certificate) {
+ String sigAlgOid = x509Certificate.getSigAlgOID();
+ if (mVerboseLoggingEnabled) {
+ Principal p = x509Certificate.getSubjectX500Principal();
+ if (p != null && !TextUtils.isEmpty(p.getName())) {
+ Log.d(TAG, "Checking cert " + p.getName());
+ }
+ }
+
+ // Wi-Fi alliance requires the use of both ECDSA secp384r1 and RSA 3072 certificates
+ // in WPA3-Enterprise 192-bit security networks, which are also known as Suite-B-192
+ // networks, even though NSA Suite-B-192 mandates ECDSA only. The use of the term
+ // Suite-B was already coined in the IEEE 802.11-2016 specification for
+ // AKM 00-0F-AC but the test plan for WPA3-Enterprise 192-bit for APs mandates
+ // support for both RSA and ECDSA, and for STAs it mandates ECDSA and optionally
+ // RSA. In order to be compatible with all WPA3-Enterprise 192-bit deployments,
+ // we are supporting both types here.
+ if (sigAlgOid.equals("1.2.840.113549.1.1.12")) {
+ // sha384WithRSAEncryption
+ if (mVerboseLoggingEnabled) {
+ Log.d(TAG, "Found Suite-B RSA certificate");
+ }
+ return WifiConfiguration.SuiteBCipher.ECDHE_RSA;
+ } else if (sigAlgOid.equals("1.2.840.10045.4.3.3")) {
+ // ecdsa-with-SHA384
+ if (mVerboseLoggingEnabled) {
+ Log.d(TAG, "Found Suite-B ECDSA certificate");
+ }
+ return WifiConfiguration.SuiteBCipher.ECDHE_ECDSA;
+ }
+ Log.e(TAG, "Invalid certificate type for Suite-B: " + sigAlgOid);
+ return -1;
+ }
}
diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java
index a7544e031..75d53fc95 100644
--- a/service/java/com/android/server/wifi/WifiMetrics.java
+++ b/service/java/com/android/server/wifi/WifiMetrics.java
@@ -29,6 +29,7 @@ import android.net.wifi.SoftApCapability;
import android.net.wifi.SoftApConfiguration;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiConfiguration.NetworkSelectionStatus;
import android.net.wifi.WifiEnterpriseConfig;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
@@ -74,6 +75,7 @@ import com.android.server.wifi.proto.nano.WifiMetricsProto.LinkProbeStats.Experi
import com.android.server.wifi.proto.nano.WifiMetricsProto.LinkProbeStats.LinkProbeFailureReasonCount;
import com.android.server.wifi.proto.nano.WifiMetricsProto.LinkSpeedCount;
import com.android.server.wifi.proto.nano.WifiMetricsProto.MeteredNetworkStats;
+import com.android.server.wifi.proto.nano.WifiMetricsProto.NetworkDisableReason;
import com.android.server.wifi.proto.nano.WifiMetricsProto.NetworkSelectionExperimentDecisions;
import com.android.server.wifi.proto.nano.WifiMetricsProto.PasspointProfileTypeCount;
import com.android.server.wifi.proto.nano.WifiMetricsProto.PasspointProvisionStats;
@@ -92,6 +94,7 @@ import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiLockStats;
import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiNetworkRequestApiLog;
import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiNetworkSuggestionApiLog;
import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiNetworkSuggestionApiLog.SuggestionAppCount;
+import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiStatus;
import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiToggleStats;
import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiUsabilityStats;
import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiUsabilityStatsEntry;
@@ -113,6 +116,7 @@ import org.json.JSONObject;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.BitSet;
import java.util.Calendar;
import java.util.HashMap;
@@ -232,11 +236,13 @@ public class WifiMetrics {
@VisibleForTesting static final int MAX_USER_ACTION_EVENTS = 200;
private LinkedList<StaEventWithTime> mStaEventList = new LinkedList<>();
private LinkedList<UserActionEventWithTime> mUserActionEventList = new LinkedList<>();
+ private WifiStatusBuilder mWifiStatusBuilder = new WifiStatusBuilder();
private int mLastPollRssi = -127;
private int mLastPollLinkSpeed = -1;
private int mLastPollRxLinkSpeed = -1;
private int mLastPollFreq = -1;
private int mLastScore = -1;
+ private boolean mAdaptiveConnectivityEnabled = true;
/**
* Metrics are stored within an instance of the WifiLog proto during runtime,
@@ -753,6 +759,88 @@ public class WifiMetrics {
}
}
+ class WifiStatusBuilder {
+ private int mNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
+ private boolean mConnected;
+ private boolean mValidated;
+ private int mRssi;
+ private int mEstimatedTxKbps;
+ private int mEstimatedRxKbps;
+ private boolean mIsStuckDueToUserChoice;
+
+ public void setNetworkId(int networkId) {
+ mNetworkId = networkId;
+ }
+
+ public int getNetworkId() {
+ return mNetworkId;
+ }
+
+ public void setConnected(boolean connected) {
+ mConnected = connected;
+ }
+
+ public void setValidated(boolean validated) {
+ mValidated = validated;
+ }
+
+ public void setRssi(int rssi) {
+ mRssi = rssi;
+ }
+
+ public void setEstimatedTxKbps(int estimatedTxKbps) {
+ mEstimatedTxKbps = estimatedTxKbps;
+ }
+
+ public void setEstimatedRxKbps(int estimatedRxKbps) {
+ mEstimatedRxKbps = estimatedRxKbps;
+ }
+
+ public void setUserChoice(boolean userChoice) {
+ mIsStuckDueToUserChoice = userChoice;
+ }
+
+ public WifiStatus toProto() {
+ WifiStatus result = new WifiStatus();
+ result.isConnected = mConnected;
+ result.isValidated = mValidated;
+ result.lastRssi = mRssi;
+ result.estimatedTxKbps = mEstimatedTxKbps;
+ result.estimatedRxKbps = mEstimatedRxKbps;
+ result.isStuckDueToUserConnectChoice = mIsStuckDueToUserChoice;
+ return result;
+ }
+ }
+
+ private NetworkDisableReason convertToNetworkDisableReason(
+ WifiConfiguration config, Set<Integer> bssidBlocklistReasons) {
+ NetworkSelectionStatus status = config.getNetworkSelectionStatus();
+ NetworkDisableReason result = new NetworkDisableReason();
+ if (config.allowAutojoin) {
+ if (!status.isNetworkEnabled()) {
+ result.disableReason =
+ MetricsUtils.convertNetworkSelectionDisableReasonToWifiProtoEnum(
+ status.getNetworkSelectionDisableReason());
+ if (status.isNetworkPermanentlyDisabled()) {
+ result.configPermanentlyDisabled = true;
+ } else {
+ result.configTemporarilyDisabled = true;
+ }
+ }
+ } else {
+ result.disableReason = NetworkDisableReason.REASON_AUTO_JOIN_DISABLED;
+ result.configPermanentlyDisabled = true;
+ }
+
+ int[] convertedBssidBlockReasons = bssidBlocklistReasons.stream()
+ .mapToInt(i -> MetricsUtils.convertBssidBlocklistReasonToWifiProtoEnum(i))
+ .toArray();
+ if (convertedBssidBlockReasons.length > 0) {
+ result.bssidDisableReasons = convertedBssidBlockReasons;
+ }
+ return result;
+ }
+
class UserActionEventWithTime {
private UserActionEvent mUserActionEvent;
private long mWallClockTimeMs = 0; // wall clock time for debugging only
@@ -763,13 +851,11 @@ public class WifiMetrics {
mUserActionEvent.startTimeMillis = mClock.getElapsedSinceBootMillis();
mWallClockTimeMs = mClock.getWallClockMillis();
mUserActionEvent.targetNetworkInfo = targetNetworkInfo;
+ mUserActionEvent.wifiStatus = mWifiStatusBuilder.toProto();
}
UserActionEventWithTime(int eventType, int targetNetId) {
- mUserActionEvent = new UserActionEvent();
- mUserActionEvent.eventType = eventType;
- mUserActionEvent.startTimeMillis = mClock.getElapsedSinceBootMillis();
- mWallClockTimeMs = mClock.getWallClockMillis();
+ this(eventType, null);
if (targetNetId >= 0) {
WifiConfiguration config = mWifiConfigManager.getConfiguredNetwork(targetNetId);
if (config != null) {
@@ -777,6 +863,8 @@ public class WifiMetrics {
networkInfo.isEphemeral = config.isEphemeral();
networkInfo.isPasspoint = config.isPasspoint();
mUserActionEvent.targetNetworkInfo = networkInfo;
+ mUserActionEvent.networkDisableReason = convertToNetworkDisableReason(
+ config, mBssidBlocklistMonitor.getFailureReasonsForSsid(config.SSID));
}
}
}
@@ -824,6 +912,9 @@ public class WifiMetrics {
case UserActionEvent.EVENT_MANUAL_CONNECT:
eventType = "EVENT_MANUAL_CONNECT";
break;
+ case UserActionEvent.EVENT_ADD_OR_UPDATE_NETWORK:
+ eventType = "EVENT_ADD_OR_UPDATE_NETWORK";
+ break;
}
sb.append(" eventType=").append(eventType);
sb.append(" startTimeMillis=").append(mUserActionEvent.startTimeMillis);
@@ -832,6 +923,27 @@ public class WifiMetrics {
sb.append(" isEphemeral=").append(networkInfo.isEphemeral);
sb.append(" isPasspoint=").append(networkInfo.isPasspoint);
}
+ WifiStatus wifiStatus = mUserActionEvent.wifiStatus;
+ if (wifiStatus != null) {
+ sb.append("\nWifiStatus: isConnected=").append(wifiStatus.isConnected);
+ sb.append(" isValidated=").append(wifiStatus.isValidated);
+ sb.append(" lastRssi=").append(wifiStatus.lastRssi);
+ sb.append(" estimatedTxKbps=").append(wifiStatus.estimatedTxKbps);
+ sb.append(" estimatedRxKbps=").append(wifiStatus.estimatedRxKbps);
+ sb.append(" isStuckDueToUserConnectChoice=")
+ .append(wifiStatus.isStuckDueToUserConnectChoice);
+ }
+ NetworkDisableReason disableReason = mUserActionEvent.networkDisableReason;
+ if (disableReason != null) {
+ sb.append("\nNetworkDisableReason: DisableReason=")
+ .append(disableReason.disableReason);
+ sb.append(" configTemporarilyDisabled=")
+ .append(disableReason.configTemporarilyDisabled);
+ sb.append(" configPermanentlyDisabled=")
+ .append(disableReason.configPermanentlyDisabled);
+ sb.append(" bssidDisableReasons=")
+ .append(Arrays.toString(disableReason.bssidDisableReasons));
+ }
return sb.toString();
}
@@ -1459,7 +1571,7 @@ public class WifiMetrics {
mScanResultRssiTimestampMillis = mClock.getElapsedSinceBootMillis();
}
mCurrentConnectionEvent.mConnectionEvent.numBssidInBlocklist =
- mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(config.SSID);
+ mBssidBlocklistMonitor.updateAndGetNumBlockedBssidsForSsid(config.SSID);
mCurrentConnectionEvent.mConnectionEvent.networkType =
WifiMetricsProto.ConnectionEvent.TYPE_UNKNOWN;
mCurrentConnectionEvent.mConnectionEvent.isOsuProvisioned = false;
@@ -1607,6 +1719,7 @@ public class WifiMetrics {
if (!result) {
mScanResultRssiTimestampMillis = -1;
}
+ mWifiStatusBuilder.setConnected(result);
}
}
}
@@ -2084,6 +2197,8 @@ public class WifiMetrics {
mLastPollRxLinkSpeed = wifiInfo.getRxLinkSpeedMbps();
incrementTxLinkSpeedBandCount(mLastPollLinkSpeed, mLastPollFreq);
incrementRxLinkSpeedBandCount(mLastPollRxLinkSpeed, mLastPollFreq);
+ mWifiStatusBuilder.setRssi(mLastPollRssi);
+ mWifiStatusBuilder.setNetworkId(wifiInfo.getNetworkId());
}
/**
@@ -2259,6 +2374,8 @@ public class WifiMetrics {
mRxThroughputMbpsHistogramAbove2G.increment(rxThroughputKbps / 1000);
}
}
+ mWifiStatusBuilder.setEstimatedTxKbps(txThroughputKbps);
+ mWifiStatusBuilder.setEstimatedRxKbps(rxThroughputKbps);
}
}
@@ -4646,6 +4763,10 @@ public class WifiMetrics {
mWifiState = wifiState;
mWifiWins = (wifiState == WifiMetricsProto.WifiLog.WIFI_ASSOCIATED);
mWifiWinsUsabilityScore = (wifiState == WifiMetricsProto.WifiLog.WIFI_ASSOCIATED);
+ if (wifiState == WifiMetricsProto.WifiLog.WIFI_DISCONNECTED
+ || wifiState == WifiMetricsProto.WifiLog.WIFI_DISABLED) {
+ mWifiStatusBuilder = new WifiStatusBuilder();
+ }
}
}
@@ -4750,6 +4871,7 @@ public class WifiMetrics {
case StaEvent.TYPE_CMD_START_ROAM:
case StaEvent.TYPE_CONNECT_NETWORK:
case StaEvent.TYPE_NETWORK_AGENT_VALID_NETWORK:
+ mWifiStatusBuilder.setValidated(true);
case StaEvent.TYPE_FRAMEWORK_DISCONNECT:
case StaEvent.TYPE_SCORE_BREACH:
case StaEvent.TYPE_MAC_CHANGE:
@@ -4787,6 +4909,7 @@ public class WifiMetrics {
if (mWifiDataStall != null) {
staEvent.isCellularDataAvailable = mWifiDataStall.isCellularDataAvailable();
}
+ staEvent.isAdaptiveConnectivityEnabled = mAdaptiveConnectivityEnabled;
mSupplicantStateChangeBitmask = 0;
mLastPollRssi = -127;
mLastPollFreq = -1;
@@ -5003,6 +5126,7 @@ public class WifiMetrics {
if (event.totalRxBytes > 0) sb.append(" totalRxBytes=").append(event.totalRxBytes);
sb.append(" screenOn=").append(event.screenOn);
sb.append(" cellularData=").append(event.isCellularDataAvailable);
+ sb.append(" adaptiveConnectivity=").append(event.isAdaptiveConnectivityEnabled);
if (event.supplicantStateChangesBitmask != 0) {
sb.append(", ").append(supplicantStateChangesBitmaskToString(
event.supplicantStateChangesBitmask));
@@ -5222,6 +5346,15 @@ public class WifiMetrics {
return result;
}
+ /**
+ * Converts Adaptive Connectivity state to UserActionEvent type.
+ * @param value
+ */
+ public static int convertAdaptiveConnectivityStateToUserActionEventType(boolean value) {
+ return value ? UserActionEvent.EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_ON
+ : UserActionEvent.EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_OFF;
+ }
+
static class MeteredNetworkStatsBuilder {
// A map from network identifier to MeteredDetail
Map<String, MeteredDetail> mNetworkMap = new ArrayMap<>();
@@ -6155,6 +6288,13 @@ public class WifiMetrics {
synchronized (mLock) {
if (networkId == WifiConfiguration.INVALID_NETWORK_ID) return;
mNetworkIdToNominatorId.put(networkId, nominatorId);
+
+ // user connect choice is preventing switcing off from the connected network
+ if (nominatorId
+ == WifiMetricsProto.ConnectionEvent.NOMINATOR_SAVED_USER_CONNECT_CHOICE
+ && mWifiStatusBuilder.getNetworkId() == networkId) {
+ mWifiStatusBuilder.setUserChoice(true);
+ }
}
}
@@ -6585,4 +6725,13 @@ public class WifiMetrics {
mCarrierWifiMetrics.numConnectionNonAuthFailure++;
}
}
+
+ /**
+ * Set Adaptive Connectivity state (On/Off)
+ */
+ public void setAdaptiveConnectivityState(boolean adaptiveConnectivityEnabled) {
+ synchronized (mLock) {
+ mAdaptiveConnectivityEnabled = adaptiveConnectivityEnabled;
+ }
+ }
}
diff --git a/service/java/com/android/server/wifi/WifiMonitor.java b/service/java/com/android/server/wifi/WifiMonitor.java
index 7f620851d..32a96d0eb 100644
--- a/service/java/com/android/server/wifi/WifiMonitor.java
+++ b/service/java/com/android/server/wifi/WifiMonitor.java
@@ -100,9 +100,6 @@ public class WifiMonitor {
/* MBO/OCE events */
public static final int MBO_OCE_BSS_TM_HANDLING_DONE = BASE + 71;
- /* Fils network connection completed */
- public static final int FILS_NETWORK_CONNECTION_EVENT = BASE + 62;
-
/* WPS config errrors */
private static final int CONFIG_MULTIPLE_PBC_DETECTED = 12;
private static final int CONFIG_AUTH_FAILURE = 18;
@@ -500,21 +497,12 @@ public class WifiMonitor {
*
* @param iface Name of iface on which this occurred.
* @param networkId ID of the network in wpa_supplicant.
+ * @param filsHlpSent Whether the connection used FILS.
* @param bssid BSSID of the access point.
*/
- public void broadcastNetworkConnectionEvent(String iface, int networkId, String bssid) {
- sendMessage(iface, NETWORK_CONNECTION_EVENT, networkId, 0, bssid);
- }
-
- /**
- * Broadcast the fils network connection event to all the handlers registered for this event.
- *
- * @param iface Name of iface on which this occurred.
- * @param networkId ID of the network in wpa_supplicant.
- * @param bssid BSSID of the access point.
- */
- public void broadcastFilsNetworkConnectionEvent(String iface, int networkId, String bssid) {
- sendMessage(iface, FILS_NETWORK_CONNECTION_EVENT, networkId, 0, bssid);
+ public void broadcastNetworkConnectionEvent(String iface, int networkId, boolean filsHlpSent,
+ String bssid) {
+ sendMessage(iface, NETWORK_CONNECTION_EVENT, networkId, filsHlpSent ? 1 : 0, bssid);
}
/**
diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java
index 9dc89addc..d1f9fbb1f 100644
--- a/service/java/com/android/server/wifi/WifiNetworkFactory.java
+++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java
@@ -65,6 +65,7 @@ import com.android.server.wifi.util.WifiPermissionsUtil;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
@@ -74,6 +75,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
+import java.util.stream.Collectors;
/**
* Network factory to handle trusted wifi network requests.
@@ -128,20 +130,23 @@ public class WifiNetworkFactory extends NetworkFactory {
private WifiScanner mWifiScanner;
private CompanionDeviceManager mCompanionDeviceManager;
// Temporary approval set by shell commands.
- private String mApprovedApp = null;
+ @Nullable private String mApprovedApp = null;
private int mGenericConnectionReqCount = 0;
// Request that is being actively processed. All new requests start out as an "active" request
// because we're processing it & handling all the user interactions associated with it. Once we
// successfully connect to the network, we transition that request to "connected".
- private NetworkRequest mActiveSpecificNetworkRequest;
- private WifiNetworkSpecifier mActiveSpecificNetworkRequestSpecifier;
+ @Nullable private NetworkRequest mActiveSpecificNetworkRequest;
+ @Nullable private WifiNetworkSpecifier mActiveSpecificNetworkRequestSpecifier;
// Request corresponding to the the network that the device is currently connected to.
- private NetworkRequest mConnectedSpecificNetworkRequest;
- private WifiNetworkSpecifier mConnectedSpecificNetworkRequestSpecifier;
- private WifiConfiguration mUserSelectedNetwork;
+ @Nullable private NetworkRequest mConnectedSpecificNetworkRequest;
+ @Nullable private WifiNetworkSpecifier mConnectedSpecificNetworkRequestSpecifier;
+ @Nullable private WifiConfiguration mUserSelectedNetwork;
private int mUserSelectedNetworkConnectRetryCount;
- private List<ScanResult> mActiveMatchedScanResults;
+ // Map of bssid to latest scan results for all scan results matching a request. Will be
+ // - null, if there are no active requests.
+ // - empty, if there are no matching scan results received for the active request.
+ @Nullable private Map<String, ScanResult> mActiveMatchedScanResults;
// Verbose logging flag.
private boolean mVerboseLoggingEnabled = false;
private boolean mPeriodicScanTimerSet = false;
@@ -237,7 +242,10 @@ public class WifiNetworkFactory extends NetworkFactory {
Log.v(TAG, "Received " + scanResults.length + " scan results");
}
handleScanResults(scanResults);
- sendNetworkRequestMatchCallbacksForActiveRequest(mActiveMatchedScanResults);
+ if (mActiveMatchedScanResults != null) {
+ sendNetworkRequestMatchCallbacksForActiveRequest(
+ mActiveMatchedScanResults.values());
+ }
scheduleNextPeriodicScan();
}
@@ -432,7 +440,10 @@ public class WifiNetworkFactory extends NetworkFactory {
// If we are already in the midst of processing a request, send matching callbacks
// immediately on registering the callback.
- sendNetworkRequestMatchCallbacksForActiveRequest(mActiveMatchedScanResults);
+ if (mActiveMatchedScanResults != null) {
+ sendNetworkRequestMatchCallbacksForActiveRequest(
+ mActiveMatchedScanResults.values());
+ }
}
/**
@@ -610,8 +621,11 @@ public class WifiNetworkFactory extends NetworkFactory {
if (mVerboseLoggingEnabled) {
Log.v(TAG, "Using cached " + cachedScanResults.length + " scan results");
}
- handleScanResults(cachedScanResults);
- sendNetworkRequestMatchCallbacksForActiveRequest(mActiveMatchedScanResults);
+ handleScanResults(cachedScanResults);
+ if (mActiveMatchedScanResults != null) {
+ sendNetworkRequestMatchCallbacksForActiveRequest(
+ mActiveMatchedScanResults.values());
+ }
startPeriodicScans();
}
}
@@ -1163,8 +1177,8 @@ public class WifiNetworkFactory extends NetworkFactory {
}
private void sendNetworkRequestMatchCallbacksForActiveRequest(
- @Nullable List<ScanResult> matchedScanResults) {
- if (matchedScanResults == null || matchedScanResults.isEmpty()) return;
+ @NonNull Collection<ScanResult> matchedScanResults) {
+ if (matchedScanResults.isEmpty()) return;
if (mRegisteredCallbacks.getNumCallbacks() == 0) {
Log.e(TAG, "No callback registered for sending network request matches. "
+ "Ignoring...");
@@ -1172,7 +1186,7 @@ public class WifiNetworkFactory extends NetworkFactory {
}
for (INetworkRequestMatchCallback callback : mRegisteredCallbacks.getCallbacks()) {
try {
- callback.onMatch(matchedScanResults);
+ callback.onMatch(new ArrayList<>(matchedScanResults));
} catch (RemoteException e) {
Log.e(TAG, "Unable to invoke network request match callback " + callback, e);
}
@@ -1265,6 +1279,7 @@ public class WifiNetworkFactory extends NetworkFactory {
if (mActiveSpecificNetworkRequestSpecifier == null
|| mActiveMatchedScanResults == null) return null;
ScanResult selectedScanResult = mActiveMatchedScanResults
+ .values()
.stream()
.filter(scanResult -> Objects.equals(
ScanResultMatchInfo.fromScanResult(scanResult),
@@ -1354,7 +1369,7 @@ public class WifiNetworkFactory extends NetworkFactory {
ScanResultMatchInfo fromWifiConfiguration =
ScanResultMatchInfo.fromWifiConfiguration(network);
- for (ScanResult scanResult : mActiveMatchedScanResults) {
+ for (ScanResult scanResult : mActiveMatchedScanResults.values()) {
ScanResultMatchInfo fromScanResult = ScanResultMatchInfo.fromScanResult(scanResult);
if (fromScanResult.equals(fromWifiConfiguration)) {
AccessPoint approvedAccessPoint =
@@ -1433,7 +1448,19 @@ public class WifiNetworkFactory extends NetworkFactory {
mWifiMetrics.incrementNetworkRequestApiMatchSizeHistogram(
matchedScanResults.size());
}
- mActiveMatchedScanResults = matchedScanResults;
+ // First set of scan results for this request.
+ if (mActiveMatchedScanResults == null) mActiveMatchedScanResults = new HashMap<>();
+ // Coalesce the new set of scan results with previous scan results received for request.
+ mActiveMatchedScanResults.putAll(matchedScanResults
+ .stream()
+ .collect(Collectors.toMap(
+ scanResult -> scanResult.BSSID, scanResult -> scanResult)));
+ // Weed out any stale cached scan results.
+ long currentTimeInMillis = mClock.getElapsedSinceBootMillis();
+ mActiveMatchedScanResults.entrySet().removeIf(
+ e -> ((currentTimeInMillis - (e.getValue().timestamp / 1000))
+ >= CACHED_SCAN_RESULTS_MAX_AGE_IN_MILLIS));
+
}
/**
diff --git a/service/java/com/android/server/wifi/WifiNetworkSelector.java b/service/java/com/android/server/wifi/WifiNetworkSelector.java
index 50078b628..fbbcb3174 100644
--- a/service/java/com/android/server/wifi/WifiNetworkSelector.java
+++ b/service/java/com/android/server/wifi/WifiNetworkSelector.java
@@ -462,6 +462,17 @@ public class WifiNetworkSelector {
return validScanDetails;
}
+ private ScanDetail findScanDetailForBssid(List<ScanDetail> scanDetails,
+ String currentBssid) {
+ for (ScanDetail scanDetail : scanDetails) {
+ ScanResult scanResult = scanDetail.getScanResult();
+ if (scanResult.BSSID.equals(currentBssid)) {
+ return scanDetail;
+ }
+ }
+ return null;
+ }
+
private boolean isEnhancedOpenSupported() {
if (mIsEnhancedOpenSupportedInitialized) {
return mIsEnhancedOpenSupported;
@@ -790,6 +801,8 @@ public class WifiNetworkSelector {
WifiCandidates.Key key = new WifiCandidates.Key(
ScanResultMatchInfo.fromWifiConfiguration(currentNetwork),
bssid, currentNetwork.networkId);
+ ScanDetail scanDetail = findScanDetailForBssid(mFilteredNetworks, currentBssid);
+ int predictedTputMbps = (scanDetail == null) ? 0 : predictThroughput(scanDetail);
wifiCandidates.add(key, currentNetwork,
NetworkNominator.NOMINATOR_ID_CURRENT,
wifiInfo.getRssi(),
@@ -797,7 +810,7 @@ public class WifiNetworkSelector {
calculateLastSelectionWeight(currentNetwork.networkId),
WifiConfiguration.isMetered(currentNetwork, wifiInfo),
isFromCarrierOrPrivilegedApp(currentNetwork),
- 0 /* Mbps */);
+ predictedTputMbps);
}
for (NetworkNominator registeredNominator : mNominators) {
localLog("About to run " + registeredNominator.getName() + " :");
diff --git a/service/java/com/android/server/wifi/WifiScoreCard.java b/service/java/com/android/server/wifi/WifiScoreCard.java
index 64da835f0..2ab5fb466 100644
--- a/service/java/com/android/server/wifi/WifiScoreCard.java
+++ b/service/java/com/android/server/wifi/WifiScoreCard.java
@@ -1689,11 +1689,18 @@ public class WifiScoreCard {
* @return
*/
public static long computeHashLong(String ssid, MacAddress mac, String l2KeySeed) {
+ final ArrayList<Byte> decodedSsid;
+ try {
+ decodedSsid = NativeUtil.decodeSsid(ssid);
+ } catch (IllegalArgumentException e) {
+ Log.e(TAG, "NativeUtil.decodeSsid failed: malformed string: " + ssid);
+ return 0;
+ }
byte[][] parts = {
// Our seed keeps the L2Keys specific to this device
l2KeySeed.getBytes(),
// ssid is either quoted utf8 or hex-encoded bytes; turn it into plain bytes.
- NativeUtil.byteArrayFromArrayList(NativeUtil.decodeSsid(ssid)),
+ NativeUtil.byteArrayFromArrayList(decodedSsid),
// And the BSSID
mac.toByteArray()
};
diff --git a/service/java/com/android/server/wifi/WifiScoreReport.java b/service/java/com/android/server/wifi/WifiScoreReport.java
index fa0ba6a3c..bd92c6dac 100644
--- a/service/java/com/android/server/wifi/WifiScoreReport.java
+++ b/service/java/com/android/server/wifi/WifiScoreReport.java
@@ -16,16 +16,25 @@
package com.android.server.wifi;
+import android.content.Context;
+import android.database.ContentObserver;
import android.net.Network;
import android.net.NetworkAgent;
+import android.net.Uri;
import android.net.wifi.IScoreUpdateObserver;
import android.net.wifi.IWifiConnectedNetworkScorer;
import android.net.wifi.WifiInfo;
import android.net.wifi.nl80211.WifiNl80211Manager;
+import android.os.Handler;
import android.os.IBinder;
+import android.os.Looper;
import android.os.RemoteException;
+import android.provider.Settings;
import android.util.Log;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.wifi.resources.R;
+
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
@@ -51,9 +60,17 @@ public class WifiScoreReport {
private static final int WIFI_CONNECTED_NETWORK_SCORER_IDENTIFIER = 0;
private static final int INVALID_SESSION_ID = -1;
private static final long MIN_TIME_TO_WAIT_BEFORE_BLOCKLIST_BSSID_MILLIS = 29000;
- private static final long DURATION_TO_BLOCKLIST_BSSID_AFTER_FIRST_EXITING_MILLIS = 30000;
private static final long INVALID_WALL_CLOCK_MILLIS = -1;
+ /**
+ * Copy of the settings string. Can't directly use the constant because it is @hide.
+ * See {@link android.provider.Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED}.
+ * TODO(b/167709538) remove this hardcoded string and create new API in Wifi mainline.
+ */
+ @VisibleForTesting
+ public static final String SETTINGS_SECURE_ADAPTIVE_CONNECTIVITY_ENABLED =
+ "adaptive_connectivity_enabled";
+
// Cache of the last score
private int mScore = ConnectedScore.WIFI_MAX_SCORE;
@@ -62,7 +79,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 +91,9 @@ public class WifiScoreReport {
WifiInfo mWifiInfo;
WifiNative mWifiNative;
WifiThreadRunner mWifiThreadRunner;
+ DeviceConfigFacade mDeviceConfigFacade;
+ Handler mHandler;
+ FrameworkFacade mFrameworkFacade;
/**
* Callback proxy. See {@link android.net.wifi.WifiManager.ScoreUpdateObserver}.
@@ -89,10 +111,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 +119,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 +192,49 @@ 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) {
+ if (mWifiInfo.getRssi()
+ >= mDeviceConfigFacade.getRssiThresholdNotSendLowScoreToCsDbm()) {
+ Log.d(TAG, "Not reporting low score because RSSI is high "
+ + mWifiInfo.getRssi());
+ return;
+ }
+ if ((millis - mLastScoreBreachLowTimeMillis)
+ < mDeviceConfigFacade.getMinConfirmationDurationSendLowScoreMs()) {
+ Log.d(TAG, "Not reporting low score because elapsed time is shorter than "
+ + "the minimum confirmation duration");
+ return;
+ }
+ }
+ if (mLastScoreBreachHighTimeMillis != INVALID_WALL_CLOCK_MILLIS
+ && (millis - mLastScoreBreachHighTimeMillis)
+ < mDeviceConfigFacade.getMinConfirmationDurationSendHighScoreMs()) {
+ Log.d(TAG, "Not reporting high score because elapsed time is shorter than "
+ + "the minimum confirmation duration");
+ return;
+ }
+ }
+ // Stay a notch above the transition score if adaptive connectivity is disabled.
+ if (!mAdaptiveConnectivityEnabled) {
+ score = ConnectedScore.WIFI_TRANSITION_SCORE + 1;
+ }
+ mNetworkAgent.sendNetworkScore(score);
+ }
+
+ /**
* Container for storing info about external scorer and tracking its death.
*/
private final class WifiConnectedNetworkScorerHolder implements IBinder.DeathRecipient {
@@ -249,9 +317,55 @@ public class WifiScoreReport {
private WifiConnectedNetworkScorerHolder mWifiConnectedNetworkScorerHolder;
+ /**
+ * Observer for adaptive connectivity enable settings changes.
+ * This is enabled by default. Will be toggled off via adb command or a settings
+ * toggle by the user to disable adaptive connectivity.
+ */
+ private class AdaptiveConnectivityEnabledSettingObserver extends ContentObserver {
+ AdaptiveConnectivityEnabledSettingObserver(Handler handler) {
+ super(handler);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ super.onChange(selfChange);
+ mAdaptiveConnectivityEnabled = getValue();
+ Log.d(TAG, "Adaptive connectivity status changed: " + mAdaptiveConnectivityEnabled);
+ mWifiMetrics.setAdaptiveConnectivityState(mAdaptiveConnectivityEnabled);
+ mWifiMetrics.logUserActionEvent(
+ mWifiMetrics.convertAdaptiveConnectivityStateToUserActionEventType(
+ mAdaptiveConnectivityEnabled));
+ }
+
+ /**
+ * Register settings change observer.
+ */
+ public void initialize() {
+ Uri uri = Settings.Secure.getUriFor(SETTINGS_SECURE_ADAPTIVE_CONNECTIVITY_ENABLED);
+ if (uri == null) {
+ Log.e(TAG, "Adaptive connectivity user toggle does not exist in Settings");
+ return;
+ }
+ mFrameworkFacade.registerContentObserver(mContext, uri, true, this);
+ mAdaptiveConnectivityEnabled = mAdaptiveConnectivityEnabledSettingObserver.getValue();
+ mWifiMetrics.setAdaptiveConnectivityState(mAdaptiveConnectivityEnabled);
+ }
+
+ public boolean getValue() {
+ return mFrameworkFacade.getIntegerSetting(
+ mContext, SETTINGS_SECURE_ADAPTIVE_CONNECTIVITY_ENABLED, 1) == 1;
+ }
+ }
+
+ private final AdaptiveConnectivityEnabledSettingObserver
+ mAdaptiveConnectivityEnabledSettingObserver;
+ private boolean mAdaptiveConnectivityEnabled = true;
+
WifiScoreReport(ScoringParams scoringParams, Clock clock, WifiMetrics wifiMetrics,
WifiInfo wifiInfo, WifiNative wifiNative, BssidBlocklistMonitor bssidBlocklistMonitor,
- WifiThreadRunner wifiThreadRunner) {
+ WifiThreadRunner wifiThreadRunner, DeviceConfigFacade deviceConfigFacade,
+ Context context, Looper looper, FrameworkFacade frameworkFacade) {
mScoringParams = scoringParams;
mClock = clock;
mAggressiveConnectedScore = new AggressiveConnectedScore(scoringParams, clock);
@@ -261,6 +375,12 @@ public class WifiScoreReport {
mWifiNative = wifiNative;
mBssidBlocklistMonitor = bssidBlocklistMonitor;
mWifiThreadRunner = wifiThreadRunner;
+ mDeviceConfigFacade = deviceConfigFacade;
+ mContext = context;
+ mFrameworkFacade = frameworkFacade;
+ mHandler = new Handler(looper);
+ mAdaptiveConnectivityEnabledSettingObserver =
+ new AdaptiveConnectivityEnabledSettingObserver(mHandler);
}
/**
@@ -276,6 +396,7 @@ public class WifiScoreReport {
}
mLastDownwardBreachTimeMillis = 0;
mLastScoreBreachLowTimeMillis = INVALID_WALL_CLOCK_MILLIS;
+ mLastScoreBreachHighTimeMillis = INVALID_WALL_CLOCK_MILLIS;
if (mVerboseLoggingEnabled) Log.d(TAG, "reset");
}
@@ -357,12 +478,7 @@ public class WifiScoreReport {
}
//report score
- if (score != mWifiInfo.getScore()) {
- if (mNetworkAgent != null) {
- mNetworkAgent.sendNetworkScore(score);
- }
- }
-
+ reportNetworkScoreToConnectivityServiceIfNecessary(score);
updateWifiMetrics(millis, s2, score);
mScore = score;
}
@@ -427,6 +543,10 @@ public class WifiScoreReport {
* @return true to indicate that an IP reachability check is recommended
*/
public boolean shouldCheckIpLayer() {
+ // Don't recommend if adaptive connectivity is disabled.
+ if (!mAdaptiveConnectivityEnabled) {
+ return false;
+ }
int nud = mScoringParams.getNudKnob();
if (nud == 0) {
return false;
@@ -609,8 +729,10 @@ public class WifiScoreReport {
+ " sessionId=" + sessionId);
return;
}
+ mWifiInfo.setScore(ConnectedScore.WIFI_MAX_SCORE);
mWifiConnectedNetworkScorerHolder.startSession(sessionId);
mLastScoreBreachLowTimeMillis = INVALID_WALL_CLOCK_MILLIS;
+ mLastScoreBreachHighTimeMillis = INVALID_WALL_CLOCK_MILLIS;
}
/**
@@ -628,9 +750,10 @@ public class WifiScoreReport {
if ((mLastScoreBreachLowTimeMillis != INVALID_WALL_CLOCK_MILLIS)
&& ((millis - mLastScoreBreachLowTimeMillis)
>= MIN_TIME_TO_WAIT_BEFORE_BLOCKLIST_BSSID_MILLIS)) {
- mBssidBlocklistMonitor.blockBssidForDurationMs(mWifiInfo.getBSSID(),
+ mBssidBlocklistMonitor.handleBssidConnectionFailure(mWifiInfo.getBSSID(),
mWifiInfo.getSSID(),
- DURATION_TO_BLOCKLIST_BSSID_AFTER_FIRST_EXITING_MILLIS);
+ BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE,
+ mWifiInfo.getRssi());
mLastScoreBreachLowTimeMillis = INVALID_WALL_CLOCK_MILLIS;
}
}
@@ -663,4 +786,11 @@ public class WifiScoreReport {
mWifiConnectedNetworkScorerHolder = null;
mWifiMetrics.setIsExternalWifiScorerOn(false);
}
+
+ /**
+ * Initialize WifiScoreReport
+ */
+ public void initialize() {
+ mAdaptiveConnectivityEnabledSettingObserver.initialize();
+ }
}
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 20e82d845..f84337cc0 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -60,6 +60,7 @@ import android.net.wifi.IOnWifiUsabilityStatsListener;
import android.net.wifi.IScanResultsCallback;
import android.net.wifi.ISoftApCallback;
import android.net.wifi.ISuggestionConnectionStatusListener;
+import android.net.wifi.IStaStateCallback;
import android.net.wifi.ITrafficStateCallback;
import android.net.wifi.IWifiConnectedNetworkScorer;
import android.net.wifi.ScanResult;
@@ -188,6 +189,8 @@ public class WifiServiceImpl extends BaseWifiService {
private final WifiConfigManager mWifiConfigManager;
private final PasspointManager mPasspointManager;
private final WifiLog mLog;
+ private final WifiStaStateNotifier mWifiStaStateNotifier;
+
/**
* Verbose logging flag. Toggled by developer options.
*/
@@ -329,6 +332,7 @@ public class WifiServiceImpl extends BaseWifiService {
mWifiScoreCard = mWifiInjector.getWifiScoreCard();
mMemoryStoreImpl = new MemoryStoreImpl(mContext, mWifiInjector,
mWifiScoreCard, mWifiInjector.getWifiHealthMonitor());
+ mWifiStaStateNotifier = mWifiInjector.getWifiStaStateNotifier();
}
/**
@@ -802,8 +806,13 @@ public class WifiServiceImpl extends BaseWifiService {
Binder.restoreCallingIdentity(ident);
}
if (mWifiPermissionsUtil.checkNetworkSettingsPermission(Binder.getCallingUid())) {
- mWifiMetrics.logUserActionEvent(enable ? UserActionEvent.EVENT_TOGGLE_WIFI_ON
- : UserActionEvent.EVENT_TOGGLE_WIFI_OFF);
+ if (enable) {
+ mWifiMetrics.logUserActionEvent(UserActionEvent.EVENT_TOGGLE_WIFI_ON);
+ } else {
+ WifiInfo wifiInfo = mClientModeImpl.syncRequestConnectionInfo();
+ mWifiMetrics.logUserActionEvent(UserActionEvent.EVENT_TOGGLE_WIFI_OFF,
+ wifiInfo == null ? -1 : wifiInfo.getNetworkId());
+ }
}
mWifiMetrics.incrementNumWifiToggles(isPrivileged, enable);
mActiveModeWarden.wifiToggled();
@@ -3724,6 +3733,31 @@ public class WifiServiceImpl extends BaseWifiService {
mWifiTrafficPoller.removeCallback(callbackIdentifier));
}
+ @Override
+ public void registerStaStateCallback(IBinder binder, IStaStateCallback callback,
+ int callbackIdentifier) {
+ if (binder == null) {
+ throw new IllegalArgumentException("Binder must not be null");
+ }
+ if (callback == null) {
+ throw new IllegalArgumentException("Callback must not be null");
+ }
+ if (mVerboseLoggingEnabled) {
+ mLog.info("registerStaStateCallback uid=%").c(Binder.getCallingUid()).flush();
+ }
+ mWifiThreadRunner.post(() ->
+ mWifiStaStateNotifier.addCallback(binder, callback, callbackIdentifier));
+ }
+
+ @Override
+ public void unregisterStaStateCallback(int callbackIdentifier) {
+ if (mVerboseLoggingEnabled) {
+ mLog.info("unregisterStaStateCallback uid=%").c(Binder.getCallingUid()).flush();
+ }
+ mWifiThreadRunner.post(() ->
+ mWifiStaStateNotifier.removeCallback(callbackIdentifier));
+ }
+
private long getSupportedFeaturesInternal() {
final AsyncChannel channel = mClientModeImplChannel;
long supportedFeatureSet = 0L;
@@ -4120,10 +4154,15 @@ public class WifiServiceImpl extends BaseWifiService {
throw new SecurityException(TAG + ": Permission denied");
}
mLog.info("connect uid=%").c(uid).flush();
- mClientModeImpl.connect(config, netId, binder, callback, callbackIdentifier, uid);
if (mWifiPermissionsUtil.checkNetworkSettingsPermission(uid)) {
- mWifiMetrics.logUserActionEvent(UserActionEvent.EVENT_MANUAL_CONNECT, netId);
+ if (config == null) {
+ mWifiMetrics.logUserActionEvent(UserActionEvent.EVENT_MANUAL_CONNECT, netId);
+ } else {
+ mWifiMetrics.logUserActionEvent(
+ UserActionEvent.EVENT_ADD_OR_UPDATE_NETWORK, config.networkId);
+ }
}
+ mClientModeImpl.connect(config, netId, binder, callback, callbackIdentifier, uid);
}
/**
@@ -4137,6 +4176,10 @@ public class WifiServiceImpl extends BaseWifiService {
throw new SecurityException(TAG + ": Permission denied");
}
mLog.info("save uid=%").c(Binder.getCallingUid()).flush();
+ if (mWifiPermissionsUtil.checkNetworkSettingsPermission(Binder.getCallingUid())) {
+ mWifiMetrics.logUserActionEvent(
+ UserActionEvent.EVENT_ADD_OR_UPDATE_NETWORK, config.networkId);
+ }
mClientModeImpl.save(
config, binder, callback, callbackIdentifier, Binder.getCallingUid());
}
diff --git a/service/java/com/android/server/wifi/WifiStaStateNotifier.java b/service/java/com/android/server/wifi/WifiStaStateNotifier.java
new file mode 100644
index 000000000..05dd87993
--- /dev/null
+++ b/service/java/com/android/server/wifi/WifiStaStateNotifier.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2020 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.net.wifi.IStaStateCallback;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.android.server.wifi.util.ExternalCallbackTracker;
+
+
+public class WifiStaStateNotifier {
+ private final ExternalCallbackTracker<IStaStateCallback> mRegisteredCallbacks;
+ private static WifiInjector mWifiInjector;
+ private static final String TAG = "WifiStaStateNotifier";
+ private static final boolean DEBUG = false;
+
+ WifiStaStateNotifier(@NonNull Looper looper, WifiInjector wifiInjector) {
+ mRegisteredCallbacks = new ExternalCallbackTracker<IStaStateCallback>(new Handler(looper));
+ mWifiInjector = wifiInjector;
+ }
+
+ public void addCallback(IBinder binder, IStaStateCallback callback,
+ int callbackIdentifier) {
+ if (DEBUG) Log.d(TAG, "addCallback");
+ if (mRegisteredCallbacks.getNumCallbacks() > 0) {
+ if (DEBUG) Log.e(TAG, "Failed to add callback, only support single request!");
+ return;
+ }
+ if (!mRegisteredCallbacks.add(binder, callback, callbackIdentifier)) {
+ if (DEBUG) Log.e(TAG, "Failed to add callback");
+ return;
+ }
+ mWifiInjector.getActiveModeWarden().registerStaEventCallback();
+ }
+
+ public void removeCallback(int callbackIdentifier) {
+ if (DEBUG) Log.d(TAG, "removeCallback");
+ mRegisteredCallbacks.remove(callbackIdentifier);
+ mWifiInjector.getActiveModeWarden().unregisterStaEventCallback();
+ }
+
+ public void onStaToBeOff() {
+ if (DEBUG) Log.d(TAG, "onStaToBeOff");
+ for (IStaStateCallback callback : mRegisteredCallbacks.getCallbacks()) {
+ try {
+ if (DEBUG) Log.d(TAG, "callback onStaToBeOff");
+ callback.onStaToBeOff();
+ } catch (RemoteException e) {
+ // do nothing
+ }
+ }
+ }
+}
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareClientState.java b/service/java/com/android/server/wifi/aware/WifiAwareClientState.java
index b71546639..c96cf2843 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareClientState.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareClientState.java
@@ -283,6 +283,19 @@ public class WifiAwareClientState {
}
/**
+ * Check if client needs ranging enabled.
+ * @return True if one of the discovery session has ranging enabled, false otherwise.
+ */
+ public boolean isRangingEnabled() {
+ for (int i = 0; i < mSessions.size(); ++i) {
+ if (mSessions.valueAt(i).isRangingEnabled()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* Dump the internal state of the class.
*/
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java b/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
index e190a2454..226304019 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
@@ -654,16 +654,9 @@ public class WifiAwareDataPathStateManager {
sNetworkCapabilitiesFilter);
LinkProperties linkProperties = new LinkProperties();
getInet6Address(nnri, mac);
- if (nnri.peerIpv6 != null) {
- final WifiAwareNetworkInfo ni = new WifiAwareNetworkInfo(
- nnri.peerIpv6, nnri.peerPort, nnri.peerTransportProtocol);
- ncBuilder.setTransportInfo(ni);
- if (VDBG) {
- Log.v(TAG, "onDataPathConfirm: AwareNetworkInfo=" + ni);
- }
- }
- if (!(mNiWrapper.configureAgentProperties(nnri, nnri.equivalentRequests, ndpId,
- ncBuilder, linkProperties) && mNiWrapper.isAddressUsable(linkProperties))) {
+ if (!(nnri.peerIpv6 != null && mNiWrapper.configureAgentProperties(nnri,
+ nnri.equivalentRequests, ndpId, ncBuilder, linkProperties)
+ && mNiWrapper.isAddressUsable(linkProperties))) {
if (VDBG) {
Log.d(TAG, "Failed address validation");
}
@@ -674,6 +667,12 @@ public class WifiAwareDataPathStateManager {
}
return;
}
+ final WifiAwareNetworkInfo ni = new WifiAwareNetworkInfo(
+ nnri.peerIpv6, nnri.peerPort, nnri.peerTransportProtocol);
+ ncBuilder.setTransportInfo(ni);
+ if (VDBG) {
+ Log.v(TAG, "onDataPathConfirm: AwareNetworkInfo=" + ni);
+ }
final NetworkAgentConfig naConfig = new NetworkAgentConfig.Builder()
.setLegacyType(ConnectivityManager.TYPE_NONE)
.setLegacyTypeName(NETWORK_TAG)
@@ -691,6 +690,8 @@ public class WifiAwareDataPathStateManager {
if (mClock.getElapsedSinceBootMillis() - nnri.startValidationTimestamp
> ADDRESS_VALIDATION_TIMEOUT_MS) {
Log.e(TAG, "Timed-out while waiting for IPv6 address to be usable");
+ mMgr.endDataPath(ndpId);
+ nnri.state = AwareNetworkRequestInformation.STATE_TERMINATING;
declareUnfullfillableAndEndDp(nnri, ndpId);
return true;
}
@@ -1486,17 +1487,13 @@ public class WifiAwareDataPathStateManager {
try {
ni = NetworkInterface.getByName(nnri.interfaceName);
} catch (SocketException e) {
- Log.e(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri
+ Log.v(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri
+ ": can't get network interface - " + e);
- mMgr.endDataPath(ndpId);
- nnri.state = AwareNetworkRequestInformation.STATE_TERMINATING;
return false;
}
if (ni == null) {
- Log.e(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri
+ Log.v(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri
+ ": can't get network interface (null)");
- mMgr.endDataPath(ndpId);
- nnri.state = AwareNetworkRequestInformation.STATE_TERMINATING;
return false;
}
Enumeration<InetAddress> addresses = ni.getInetAddresses();
@@ -1509,9 +1506,7 @@ public class WifiAwareDataPathStateManager {
}
if (linkLocal == null) {
- Log.e(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri + ": no link local addresses");
- mMgr.endDataPath(ndpId);
- nnri.state = AwareNetworkRequestInformation.STATE_TERMINATING;
+ Log.v(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri + ": no link local addresses");
return false;
}
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareDiscoverySessionState.java b/service/java/com/android/server/wifi/aware/WifiAwareDiscoverySessionState.java
index 9af954557..bfd3e2c19 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareDiscoverySessionState.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareDiscoverySessionState.java
@@ -103,6 +103,10 @@ public class WifiAwareDiscoverySessionState {
return mIsRangingEnabled;
}
+ public void setRangingEnabled(boolean enabled) {
+ mIsRangingEnabled = enabled;
+ }
+
public long getCreationTime() {
return mCreationTime;
}
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareNativeApi.java b/service/java/com/android/server/wifi/aware/WifiAwareNativeApi.java
index 4e6f08613..38400223a 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareNativeApi.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareNativeApi.java
@@ -355,10 +355,11 @@ public class WifiAwareNativeApi implements WifiAwareShellCommand.DelegatedShellC
* (true) or an update (false) to the configuration.
* @param isInteractive PowerManager.isInteractive
* @param isIdle PowerManager.isIdle
+ * @param rangingEnabled Indicates whether or not enable ranging.
*/
public boolean enableAndConfigure(short transactionId, ConfigRequest configRequest,
boolean notifyIdentityChange, boolean initialConfiguration, boolean isInteractive,
- boolean isIdle) {
+ boolean isIdle, boolean rangingEnabled) {
if (mDbg) {
Log.v(TAG, "enableAndConfigure: transactionId=" + transactionId + ", configRequest="
+ configRequest + ", notifyIdentityChange=" + notifyIdentityChange
@@ -379,7 +380,7 @@ public class WifiAwareNativeApi implements WifiAwareShellCommand.DelegatedShellC
configSupplemental12.discoveryBeaconIntervalMs = 0;
configSupplemental12.numberOfSpatialStreamsInDiscovery = 0;
configSupplemental12.enableDiscoveryWindowEarlyTermination = false;
- configSupplemental12.enableRanging = true;
+ configSupplemental12.enableRanging = rangingEnabled;
}
NanBandSpecificConfig config24 = new NanBandSpecificConfig();
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareStateManager.java b/service/java/com/android/server/wifi/aware/WifiAwareStateManager.java
index 73e2d043a..baa822e11 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareStateManager.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareStateManager.java
@@ -226,6 +226,7 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
private final SparseArray<WifiAwareClientState> mClients = new SparseArray<>();
private ConfigRequest mCurrentAwareConfiguration = null;
private boolean mCurrentIdentityNotification = false;
+ private boolean mCurrentRangingEnabled = false;
private static final byte[] ALL_ZERO_MAC = new byte[] {0, 0, 0, 0, 0, 0};
private byte[] mCurrentDiscoveryInterfaceMac = ALL_ZERO_MAC;
@@ -642,7 +643,7 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
Message msg = mSm.obtainMessage(MESSAGE_TYPE_COMMAND);
msg.arg1 = COMMAND_TYPE_UPDATE_PUBLISH;
msg.arg2 = clientId;
- msg.obj = publishConfig;
+ msg.getData().putParcelable(MESSAGE_BUNDLE_KEY_CONFIG, publishConfig);
msg.getData().putInt(MESSAGE_BUNDLE_KEY_SESSION_ID, sessionId);
mSm.sendMessage(msg);
}
@@ -669,7 +670,7 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
Message msg = mSm.obtainMessage(MESSAGE_TYPE_COMMAND);
msg.arg1 = COMMAND_TYPE_UPDATE_SUBSCRIBE;
msg.arg2 = clientId;
- msg.obj = subscribeConfig;
+ msg.getData().putParcelable(MESSAGE_BUNDLE_KEY_CONFIG, subscribeConfig);
msg.getData().putInt(MESSAGE_BUNDLE_KEY_SESSION_ID, sessionId);
mSm.sendMessage(msg);
}
@@ -1615,8 +1616,8 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
case COMMAND_TYPE_UPDATE_PUBLISH: {
int clientId = msg.arg2;
int sessionId = msg.getData().getInt(MESSAGE_BUNDLE_KEY_SESSION_ID);
- PublishConfig publishConfig = (PublishConfig) msg.obj;
-
+ PublishConfig publishConfig = (PublishConfig) msg.getData()
+ .getParcelable(MESSAGE_BUNDLE_KEY_CONFIG);
waitForResponse = updatePublishLocal(mCurrentTransactionId, clientId, sessionId,
publishConfig);
break;
@@ -1635,7 +1636,8 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
case COMMAND_TYPE_UPDATE_SUBSCRIBE: {
int clientId = msg.arg2;
int sessionId = msg.getData().getInt(MESSAGE_BUNDLE_KEY_SESSION_ID);
- SubscribeConfig subscribeConfig = (SubscribeConfig) msg.obj;
+ SubscribeConfig subscribeConfig = (SubscribeConfig) msg.getData()
+ .getParcelable(MESSAGE_BUNDLE_KEY_CONFIG);
waitForResponse = updateSubscribeLocal(mCurrentTransactionId, clientId,
sessionId, subscribeConfig);
@@ -2247,7 +2249,8 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
boolean success = mWifiAwareNativeApi.enableAndConfigure(transactionId, merged,
notificationRequired, mCurrentAwareConfiguration == null,
- mPowerManager.isInteractive(), mPowerManager.isDeviceIdleMode());
+ mPowerManager.isInteractive(), mPowerManager.isDeviceIdleMode(),
+ mCurrentRangingEnabled);
if (!success) {
try {
callback.onConnectFail(NanStatusType.INTERNAL_FAILURE);
@@ -2292,13 +2295,16 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
return false;
}
boolean notificationReqs = doesAnyClientNeedIdentityChangeNotifications();
+ boolean rangingEnabled = doesAnyClientNeedRanging();
if (merged.equals(mCurrentAwareConfiguration)
- && mCurrentIdentityNotification == notificationReqs) {
+ && mCurrentIdentityNotification == notificationReqs
+ && mCurrentRangingEnabled == rangingEnabled) {
return false;
}
return mWifiAwareNativeApi.enableAndConfigure(transactionId, merged, notificationReqs,
- false, mPowerManager.isInteractive(), mPowerManager.isDeviceIdleMode());
+ false, mPowerManager.isInteractive(), mPowerManager.isDeviceIdleMode(),
+ rangingEnabled);
}
private boolean reconfigureLocal(short transactionId) {
@@ -2310,10 +2316,11 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
}
boolean notificationReqs = doesAnyClientNeedIdentityChangeNotifications();
+ boolean rangingEnabled = doesAnyClientNeedRanging();
return mWifiAwareNativeApi.enableAndConfigure(transactionId, mCurrentAwareConfiguration,
notificationReqs, false, mPowerManager.isInteractive(),
- mPowerManager.isDeviceIdleMode());
+ mPowerManager.isDeviceIdleMode(), rangingEnabled);
}
private void terminateSessionLocal(int clientId, int sessionId) {
@@ -2329,6 +2336,10 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
}
WifiAwareDiscoverySessionState session = client.terminateSession(sessionId);
+ // If Ranging enabled require changes, reconfigure.
+ if (mCurrentRangingEnabled != doesAnyClientNeedRanging()) {
+ reconfigure();
+ }
if (session != null) {
mAwareMetrics.recordDiscoverySessionDuration(session.getCreationTime(),
session.isPublishSession());
@@ -2624,6 +2635,7 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
Log.wtf(TAG, "onConfigCompletedLocal: got a null merged configuration after config!?");
}
mCurrentIdentityNotification = doesAnyClientNeedIdentityChangeNotifications();
+ mCurrentRangingEnabled = doesAnyClientNeedRanging();
}
private void onConfigFailedLocal(Message failedCommand, int reason) {
@@ -2685,6 +2697,26 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
+ ", pubSubId=" + pubSubId + ", isPublish=" + isPublish);
}
+ boolean isRangingEnabled = false;
+ int minRange = -1;
+ int maxRange = -1;
+ if (isPublish) {
+ PublishConfig publishConfig = completedCommand.getData().getParcelable(
+ MESSAGE_BUNDLE_KEY_CONFIG);
+ isRangingEnabled = publishConfig.mEnableRanging;
+ } else {
+ SubscribeConfig subscribeConfig = completedCommand.getData().getParcelable(
+ MESSAGE_BUNDLE_KEY_CONFIG);
+ isRangingEnabled =
+ subscribeConfig.mMinDistanceMmSet || subscribeConfig.mMaxDistanceMmSet;
+ if (subscribeConfig.mMinDistanceMmSet) {
+ minRange = subscribeConfig.mMinDistanceMm;
+ }
+ if (subscribeConfig.mMaxDistanceMmSet) {
+ maxRange = subscribeConfig.mMaxDistanceMm;
+ }
+ }
+
if (completedCommand.arg1 == COMMAND_TYPE_PUBLISH
|| completedCommand.arg1 == COMMAND_TYPE_SUBSCRIBE) {
int clientId = completedCommand.arg2;
@@ -2706,26 +2738,6 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
return;
}
- boolean isRangingEnabled = false;
- int minRange = -1;
- int maxRange = -1;
- if (completedCommand.arg1 == COMMAND_TYPE_PUBLISH) {
- PublishConfig publishConfig = completedCommand.getData().getParcelable(
- MESSAGE_BUNDLE_KEY_CONFIG);
- isRangingEnabled = publishConfig.mEnableRanging;
- } else {
- SubscribeConfig subscribeConfig = completedCommand.getData().getParcelable(
- MESSAGE_BUNDLE_KEY_CONFIG);
- isRangingEnabled =
- subscribeConfig.mMinDistanceMmSet || subscribeConfig.mMaxDistanceMmSet;
- if (subscribeConfig.mMinDistanceMmSet) {
- minRange = subscribeConfig.mMinDistanceMm;
- }
- if (subscribeConfig.mMaxDistanceMmSet) {
- maxRange = subscribeConfig.mMaxDistanceMm;
- }
- }
-
WifiAwareDiscoverySessionState session = new WifiAwareDiscoverySessionState(
mWifiAwareNativeApi, sessionId, pubSubId, callback, isPublish, isRangingEnabled,
SystemClock.elapsedRealtime());
@@ -2767,11 +2779,17 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
Log.e(TAG, "onSessionConfigSuccessLocal: onSessionConfigSuccess() RemoteException="
+ e);
}
+ session.setRangingEnabled(isRangingEnabled);
mAwareMetrics.recordDiscoveryStatus(client.getUid(), NanStatusType.SUCCESS,
completedCommand.arg1 == COMMAND_TYPE_UPDATE_PUBLISH);
} else {
Log.wtf(TAG,
"onSessionConfigSuccessLocal: unexpected completedCommand=" + completedCommand);
+ return;
+ }
+ // If ranging require changes, reconfigure.
+ if (mCurrentRangingEnabled != doesAnyClientNeedRanging()) {
+ reconfigure();
}
}
@@ -2829,6 +2847,9 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
if (reason == NanStatusType.INVALID_SESSION_ID) {
client.removeSession(sessionId);
+ if (mCurrentRangingEnabled != doesAnyClientNeedRanging()) {
+ reconfigure();
+ }
}
} else {
Log.wtf(TAG, "onSessionConfigFailLocal: unexpected failedCommand=" + failedCommand);
@@ -3059,6 +3080,9 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
"onSessionTerminatedLocal onSessionTerminated(): RemoteException (FYI): " + e);
}
data.first.removeSession(data.second.getSessionId());
+ if (mCurrentRangingEnabled != doesAnyClientNeedRanging()) {
+ reconfigure();
+ }
mAwareMetrics.recordDiscoverySessionDuration(data.second.getCreationTime(),
data.second.isPublishSession());
}
@@ -3228,6 +3252,15 @@ public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShe
return false;
}
+ private boolean doesAnyClientNeedRanging() {
+ for (int i = 0; i < mClients.size(); ++i) {
+ if (mClients.valueAt(i).isRangingEnabled()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private static String messageToString(Message msg) {
StringBuilder sb = new StringBuilder();
diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
index 2c291f024..d398759ab 100644
--- a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
+++ b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
@@ -18,12 +18,14 @@ package com.android.server.wifi.hotspot2;
import static android.app.AppOpsManager.OPSTR_CHANGE_WIFI_STATE;
import static android.net.wifi.WifiConfiguration.MeteredOverride;
+import static android.net.wifi.WifiInfo.DEFAULT_MAC_ADDRESS;
import static java.security.cert.PKIXReason.NO_TRUST_ANCHOR;
import android.annotation.NonNull;
import android.app.AppOpsManager;
import android.content.Context;
+import android.net.MacAddress;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiEnterpriseConfig;
@@ -40,6 +42,7 @@ import android.util.Log;
import android.util.Pair;
import com.android.server.wifi.Clock;
+import com.android.server.wifi.MacAddressUtil;
import com.android.server.wifi.NetworkUpdateResult;
import com.android.server.wifi.WifiCarrierInfoManager;
import com.android.server.wifi.WifiConfigManager;
@@ -119,7 +122,9 @@ public class PasspointManager {
private final PasspointProvisioner mPasspointProvisioner;
private final AppOpsManager mAppOps;
private final WifiCarrierInfoManager mWifiCarrierInfoManager;
+ private final MacAddressUtil mMacAddressUtil;
private final WifiPermissionsUtil mWifiPermissionsUtil;
+
/**
* Map of package name of an app to the app ops changed listener for the app.
*/
@@ -306,6 +311,7 @@ public class PasspointManager {
WifiConfigStore wifiConfigStore,
WifiMetrics wifiMetrics,
WifiCarrierInfoManager wifiCarrierInfoManager,
+ MacAddressUtil macAddressUtil,
WifiPermissionsUtil wifiPermissionsUtil) {
mPasspointEventHandler = objectFactory.makePasspointEventHandler(wifiNative,
new CallbackHandler(context));
@@ -328,6 +334,7 @@ public class PasspointManager {
this, wifiMetrics);
mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
sPasspointManager = this;
+ mMacAddressUtil = macAddressUtil;
mWifiPermissionsUtil = wifiPermissionsUtil;
}
@@ -1107,6 +1114,15 @@ public class PasspointManager {
continue;
}
WifiConfiguration config = provider.getWifiConfig();
+ if (mWifiConfigManager.shouldUseAggressiveRandomization(config)) {
+ config.setRandomizedMacAddress(MacAddress.fromString(DEFAULT_MAC_ADDRESS));
+ } else {
+ MacAddress result = mMacAddressUtil.calculatePersistentMac(config.getKey(),
+ mMacAddressUtil.obtainMacRandHashFunction(Process.WIFI_UID));
+ if (result != null) {
+ config.setRandomizedMacAddress(result);
+ }
+ }
// If the Passpoint configuration is from a suggestion, check if the app shares this
// suggestion with the user.
if (provider.isFromSuggestion()
diff --git a/service/java/com/android/server/wifi/p2p/SupplicantP2pIfaceHal.java b/service/java/com/android/server/wifi/p2p/SupplicantP2pIfaceHal.java
index 2d0886188..dca3a6082 100644
--- a/service/java/com/android/server/wifi/p2p/SupplicantP2pIfaceHal.java
+++ b/service/java/com/android/server/wifi/p2p/SupplicantP2pIfaceHal.java
@@ -63,7 +63,6 @@ public class SupplicantP2pIfaceHal {
private static final String TAG = "SupplicantP2pIfaceHal";
private static boolean sVerboseLoggingEnabled = true;
private static final int RESULT_NOT_VALID = -1;
- private static final int DEFAULT_GROUP_OWNER_INTENT = 6;
private static final int DEFAULT_OPERATING_CLASS = 81;
/**
* Regex pattern for extracting the wps device type bytes.
@@ -307,7 +306,7 @@ public class SupplicantP2pIfaceHal {
}
supplicantIface.setResult(status, iface);
});
- } catch (RemoteException e) {
+ } catch (RemoteException | IllegalArgumentException e) {
Log.e(TAG, "ISupplicant.getInterface exception: " + e);
supplicantServiceDiedHandler();
return null;
@@ -828,13 +827,9 @@ public class SupplicantP2pIfaceHal {
String preSelectedPin = TextUtils.isEmpty(config.wps.pin) ? "" : config.wps.pin;
boolean persistent = (config.netId == WifiP2pGroup.NETWORK_ID_PERSISTENT);
- int goIntent = 0;
- if (!joinExistingGroup) {
- int groupOwnerIntent = config.groupOwnerIntent;
- if (groupOwnerIntent < 0 || groupOwnerIntent > 15) {
- groupOwnerIntent = DEFAULT_GROUP_OWNER_INTENT;
- }
- goIntent = groupOwnerIntent;
+ if (config.groupOwnerIntent < 0 || config.groupOwnerIntent > 15) {
+ Log.e(TAG, "Invalid group owner intent: " + config.groupOwnerIntent);
+ return null;
}
SupplicantResult<String> result = new SupplicantResult(
@@ -842,7 +837,7 @@ public class SupplicantP2pIfaceHal {
try {
mISupplicantP2pIface.connect(
peerAddress, provisionMethod, preSelectedPin, joinExistingGroup,
- persistent, goIntent,
+ persistent, config.groupOwnerIntent,
(SupplicantStatus status, String generatedPin) -> {
result.setResult(status, generatedPin);
});
diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
index 61e6c16bc..05b00f4d9 100644
--- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
+++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
@@ -44,6 +44,9 @@ import android.net.ip.IIpClient;
import android.net.ip.IpClientCallbacks;
import android.net.ip.IpClientUtil;
import android.net.shared.ProvisioningConfiguration;
+import android.net.wifi.ScanResult;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WpsInfo;
import android.net.wifi.p2p.IWifiP2pManager;
@@ -114,6 +117,7 @@ import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
/**
* WifiP2pService includes a state machine to perform Wi-Fi p2p operations. Applications
@@ -129,6 +133,8 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
private static final String TAG = "WifiP2pService";
private boolean mVerboseLoggingEnabled = false;
private static final String NETWORKTYPE = "WIFI_P2P";
+ @VisibleForTesting
+ static final int DEFAULT_GROUP_OWNER_INTENT = 6;
private Context mContext;
@@ -240,7 +246,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
private final boolean mP2pSupported;
- private WifiP2pDevice mThisDevice = new WifiP2pDevice();
+ private final WifiP2pDevice mThisDevice = new WifiP2pDevice();
// When a group has been explicitly created by an app, we persist the group
// even after all clients have been disconnected until an explicit remove
@@ -700,6 +706,11 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
public void setMiracastMode(int mode) {
checkConfigureWifiDisplayPermission();
mP2pStateMachine.sendMessage(SET_MIRACAST_MODE, mode);
+ if (mWifiChannel != null) {
+ mWifiChannel.sendMessage(WifiP2pServiceImpl.SET_MIRACAST_MODE, mode);
+ } else {
+ Log.e(TAG, "setMiracastMode(): WifiChannel is null");
+ }
}
@Override
@@ -2239,6 +2250,8 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
break;
case PEER_CONNECTION_USER_CONFIRM:
mSavedPeerConfig.wps.setup = WpsInfo.DISPLAY;
+ mSavedPeerConfig.groupOwnerIntent =
+ selectGroupOwnerIntentIfNecessary(mSavedPeerConfig);
mWifiNative.p2pConnect(mSavedPeerConfig, FORM_GROUP);
transitionTo(mGroupNegotiationState);
break;
@@ -3323,7 +3336,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
/**
* This method unifies the persisent group list, cleans up unused
* networks and if required, updates corresponding broadcast receivers
- * @param boolean if true, reload the group list from scratch
+ * @param reload if true, reload the group list from scratch
* and send broadcast message with fresh list
*/
private void updatePersistentNetworks(boolean reload) {
@@ -3333,7 +3346,11 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
// no network has been found.
if (mWifiNative.p2pListNetworks(mGroups) || reload) {
for (WifiP2pGroup group : mGroups.getGroupList()) {
- if (mThisDevice.deviceAddress.equals(group.getOwner().deviceAddress)) {
+ if (group.getOwner() == null) {
+ Log.d(TAG, "group.getOwner() null");
+ continue;
+ }
+ if (Objects.equals(mThisDevice.deviceAddress, group.getOwner().deviceAddress)) {
group.setOwner(mThisDevice);
}
}
@@ -3532,6 +3549,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
Log.e(TAG, "Invalid device");
return;
}
+ config.groupOwnerIntent = selectGroupOwnerIntentIfNecessary(config);
String pin = mWifiNative.p2pConnect(config, dev.isGroupOwner());
try {
Integer.parseInt(pin);
@@ -4308,6 +4326,38 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
clearServiceRequests(c.mMessenger);
}
}
+
+ private int selectGroupOwnerIntentIfNecessary(WifiP2pConfig config) {
+ int intent = config.groupOwnerIntent;
+ // return the legacy default value for invalid values.
+ if (intent != WifiP2pConfig.GROUP_OWNER_INTENT_AUTO) {
+ if (intent < WifiP2pConfig.GROUP_OWNER_INTENT_MIN
+ || intent > WifiP2pConfig.GROUP_OWNER_INTENT_MAX) {
+ intent = DEFAULT_GROUP_OWNER_INTENT;
+ }
+ return intent;
+ }
+
+ WifiManager wifiManager = mContext.getSystemService(WifiManager.class);
+
+ WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+ Log.d(TAG, "WifiInfo: " + wifiInfo);
+ int freq = wifiInfo.getFrequency();
+ if (wifiInfo.getNetworkId() == WifiConfiguration.INVALID_NETWORK_ID) {
+ intent = DEFAULT_GROUP_OWNER_INTENT + 1;
+ } else if (ScanResult.is24GHz(freq)) {
+ intent = WifiP2pConfig.GROUP_OWNER_INTENT_MIN;
+ } else if (ScanResult.is5GHz(freq)) {
+ // If both sides use the maximum, the negotiation would fail.
+ intent = WifiP2pConfig.GROUP_OWNER_INTENT_MAX - 1;
+ } else {
+ intent = DEFAULT_GROUP_OWNER_INTENT;
+ }
+ Log.i(TAG, "change GO intent value from "
+ + config.groupOwnerIntent + " to " + intent);
+ return intent;
+ }
+
}
/**
diff --git a/service/java/com/android/server/wifi/util/ApConfigUtil.java b/service/java/com/android/server/wifi/util/ApConfigUtil.java
index 39d0df5f5..1e8cc24a0 100644
--- a/service/java/com/android/server/wifi/util/ApConfigUtil.java
+++ b/service/java/com/android/server/wifi/util/ApConfigUtil.java
@@ -65,7 +65,8 @@ public class ApConfigUtil {
sBandToOperatingClass.append(SoftApConfiguration.BAND_2GHZ, new int[]{81, 82, 83, 84});
sBandToOperatingClass.append(SoftApConfiguration.BAND_5GHZ, new int[]{115, 116, 117, 118,
119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130});
- sBandToOperatingClass.append(SoftApConfiguration.BAND_6GHZ, new int[]{131, 132, 133, 134});
+ sBandToOperatingClass.append(SoftApConfiguration.BAND_6GHZ, new int[]{131, 132, 133, 134,
+ 135, 136});
}
/**
diff --git a/service/java/com/android/server/wifi/util/InformationElementUtil.java b/service/java/com/android/server/wifi/util/InformationElementUtil.java
index 60d074e00..a94c15f8b 100644
--- a/service/java/com/android/server/wifi/util/InformationElementUtil.java
+++ b/service/java/com/android/server/wifi/util/InformationElementUtil.java
@@ -918,8 +918,8 @@ public class InformationElementUtil {
private static final int RSN_AKM_OWE = 0x12ac0f00;
private static final int RSN_AKM_EAP_SUITE_B_192 = 0x0cac0f00;
private static final int RSN_OSEN = 0x019a6f50;
- private static final int RSN_AKM_FILS_SHA256 = 0x0eac0f00;
- private static final int RSN_AKM_FILS_SHA384 = 0x0fac0f00;
+ private static final int RSN_AKM_EAP_FILS_SHA256 = 0x0eac0f00;
+ private static final int RSN_AKM_EAP_FILS_SHA384 = 0x0fac0f00;
private static final int WPA_CIPHER_NONE = 0x00f25000;
private static final int WPA_CIPHER_TKIP = 0x02f25000;
@@ -1022,10 +1022,10 @@ public class InformationElementUtil {
case RSN_OSEN:
rsnKeyManagement.add(ScanResult.KEY_MGMT_OSEN);
break;
- case RSN_AKM_FILS_SHA256:
+ case RSN_AKM_EAP_FILS_SHA256:
rsnKeyManagement.add(ScanResult.KEY_MGMT_FILS_SHA256);
break;
- case RSN_AKM_FILS_SHA384:
+ case RSN_AKM_EAP_FILS_SHA384:
rsnKeyManagement.add(ScanResult.KEY_MGMT_FILS_SHA384);
break;
default:
@@ -1307,9 +1307,9 @@ public class InformationElementUtil {
case ScanResult.KEY_MGMT_WAPI_CERT:
return "WAPI-CERT";
case ScanResult.KEY_MGMT_FILS_SHA256:
- return "FILS-SHA256";
+ return "EAP-FILS-SHA256";
case ScanResult.KEY_MGMT_FILS_SHA384:
- return "FILS-SHA384";
+ return "EAP-FILS-SHA384";
default:
return "?";
}
diff --git a/service/java/com/android/server/wifi/util/MetricsUtils.java b/service/java/com/android/server/wifi/util/MetricsUtils.java
index 2c9c7f741..4c87aa237 100644
--- a/service/java/com/android/server/wifi/util/MetricsUtils.java
+++ b/service/java/com/android/server/wifi/util/MetricsUtils.java
@@ -16,8 +16,12 @@
package com.android.server.wifi.util;
+import android.net.wifi.WifiConfiguration.NetworkSelectionStatus;
import android.util.SparseIntArray;
+import com.android.server.wifi.BssidBlocklistMonitor;
+import com.android.server.wifi.proto.nano.WifiMetricsProto.NetworkDisableReason;
+
/**
* Utilities for Metrics collections.
*/
@@ -188,4 +192,65 @@ public class MetricsUtils {
return protoArray;
}
+
+ /**
+ * Converts NetworkSelectionStatus.NetworkSelectionDisableReason to
+ * WifiMetricsProto.NetworkDisableReason.DisableReason
+ */
+ public static int convertNetworkSelectionDisableReasonToWifiProtoEnum(int reason) {
+ switch (reason) {
+ case NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION:
+ return NetworkDisableReason.REASON_ASSOCIATION_REJECTION;
+ case NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE:
+ return NetworkDisableReason.REASON_AUTHENTICATION_FAILURE;
+ case NetworkSelectionStatus.DISABLED_DHCP_FAILURE:
+ return NetworkDisableReason.REASON_DHCP_FAILURE;
+ case NetworkSelectionStatus.DISABLED_NO_INTERNET_TEMPORARY:
+ case NetworkSelectionStatus.DISABLED_NO_INTERNET_PERMANENT:
+ return NetworkDisableReason.REASON_NETWORK_VALIDATION_FAILURE;
+ case NetworkSelectionStatus.DISABLED_AUTHENTICATION_NO_CREDENTIALS:
+ return NetworkDisableReason.REASON_AUTHENTICATION_NO_CREDENTIALS;
+ case NetworkSelectionStatus.DISABLED_BY_WRONG_PASSWORD:
+ return NetworkDisableReason.REASON_WRONG_PASSWORD;
+ case NetworkSelectionStatus.DISABLED_AUTHENTICATION_NO_SUBSCRIPTION:
+ return NetworkDisableReason.REASON_AUTHENTICATION_NO_SUBSCRIPTION;
+ default:
+ return NetworkDisableReason.REASON_UNKNOWN;
+ }
+ }
+
+ /**
+ * Converts BssidBlocklistMonitor.FailureReason to
+ * WifiMetricsProto.NetworkDisableReason.DisableReason
+ */
+ public static int convertBssidBlocklistReasonToWifiProtoEnum(int reason) {
+ switch (reason) {
+ case BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA:
+ return NetworkDisableReason.REASON_AP_UNABLE_TO_HANDLE_NEW_STA;
+ case BssidBlocklistMonitor.REASON_NETWORK_VALIDATION_FAILURE:
+ return NetworkDisableReason.REASON_NETWORK_VALIDATION_FAILURE;
+ case BssidBlocklistMonitor.REASON_WRONG_PASSWORD:
+ return NetworkDisableReason.REASON_WRONG_PASSWORD;
+ case BssidBlocklistMonitor.REASON_EAP_FAILURE:
+ return NetworkDisableReason.REASON_EAP_FAILURE;
+ case BssidBlocklistMonitor.REASON_ASSOCIATION_REJECTION:
+ return NetworkDisableReason.REASON_ASSOCIATION_REJECTION;
+ case BssidBlocklistMonitor.REASON_ASSOCIATION_TIMEOUT:
+ return NetworkDisableReason.REASON_ASSOCIATION_TIMEOUT;
+ case BssidBlocklistMonitor.REASON_AUTHENTICATION_FAILURE:
+ return NetworkDisableReason.REASON_AUTHENTICATION_FAILURE;
+ case BssidBlocklistMonitor.REASON_DHCP_FAILURE:
+ return NetworkDisableReason.REASON_DHCP_FAILURE;
+ case BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT:
+ return NetworkDisableReason.REASON_ABNORMAL_DISCONNECT;
+ case BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_MBO_OCE:
+ return NetworkDisableReason.REASON_FRAMEWORK_DISCONNECT_MBO_OCE;
+ case BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT:
+ return NetworkDisableReason.REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT;
+ case BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE:
+ return NetworkDisableReason.REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE;
+ default:
+ return NetworkDisableReason.REASON_UNKNOWN;
+ }
+ }
}
diff --git a/service/java/com/android/server/wifi/util/ScanResultUtil.java b/service/java/com/android/server/wifi/util/ScanResultUtil.java
index dc2281ad2..4085045b5 100644
--- a/service/java/com/android/server/wifi/util/ScanResultUtil.java
+++ b/service/java/com/android/server/wifi/util/ScanResultUtil.java
@@ -233,6 +233,10 @@ public class ScanResultUtil {
} else {
rssiInfo = String.format("%9d ", r.level);
}
+ if ((r.flags & ScanResult.FLAG_PASSPOINT_NETWORK)
+ == ScanResult.FLAG_PASSPOINT_NETWORK) {
+ r.capabilities += "[PASSPOINT]";
+ }
pw.printf(" %17s %9d %18s %7s %-32s %s\n",
r.BSSID,
r.frequency,
diff --git a/service/proto/src/metrics.proto b/service/proto/src/metrics.proto
index 30b1690cc..1c3b27872 100644
--- a/service/proto/src/metrics.proto
+++ b/service/proto/src/metrics.proto
@@ -1471,6 +1471,9 @@ message StaEvent {
// Whether cellular data network is available
optional bool is_cellular_data_available = 25;
+
+ //Whether Adaptive Connectivity is enabled
+ optional bool is_adaptive_connectivity_enabled = 26;
}
// Wi-Fi Aware metrics
@@ -3156,6 +3159,12 @@ message UserActionEvent {
EVENT_MANUAL_CONNECT = 11;
// User changes the metered setting to "detect automatically"
EVENT_CONFIGURE_METERED_STATUS_AUTO = 12;
+ // User adds a new network or updates configurations for an existing network.
+ EVENT_ADD_OR_UPDATE_NETWORK = 13;
+ // User sets the adaptive connectivity to on
+ EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_ON = 14;
+ // User sets the adaptive connectivity to off
+ EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_OFF = 15;
}
// The type of user action
@@ -3167,6 +3176,34 @@ message UserActionEvent {
// Additional information on the target network for the action. This is not applicable and will
// be null for some actions such as EVENT_TOGGLE_WIFI_ON.
optional TargetNetworkInfo target_network_info = 3;
+
+ // Information about the currently connected network.
+ optional WifiStatus wifi_status = 4;
+
+ // Reasons why the network applicable for this user action is disabled.
+ // Normally this should be referring to the currently connected network.
+ // For a manual connection, this is referring to the user selected networks.
+ optional NetworkDisableReason network_disable_reason = 5;
+}
+
+message WifiStatus {
+ // Wifi is connected.
+ optional bool is_connected = 1;
+
+ // Wifi is validated
+ optional bool is_validated = 2;
+
+ // The last observed RSSI
+ optional sint32 last_rssi = 3;
+
+ // Estimated TX
+ optional int32 estimated_tx_kbps = 4;
+
+ // Estimated RX
+ optional int32 estimated_rx_kbps = 5;
+
+ // There is another candidate with better score, but user connect choice is preventing the switch.
+ optional bool is_stuck_due_to_user_connect_choice = 6;
}
// Additional information on a network
@@ -3178,6 +3215,56 @@ message TargetNetworkInfo {
optional bool is_passpoint = 2;
}
+// Reasons why a configuration or BSSID is disabled.
+message NetworkDisableReason {
+ enum DisableReason {
+ // Default value, should not be used.
+ REASON_UNKNOWN = 0;
+ // AP unable to accept more clients, a special kind of association rejection failure.
+ REASON_AP_UNABLE_TO_HANDLE_NEW_STA = 1;
+ // No internet
+ REASON_NETWORK_VALIDATION_FAILURE = 2;
+ // Password is incorrect, a special kind of authentication failure.
+ REASON_WRONG_PASSWORD = 3;
+ // Incorrect EAP credentials.
+ REASON_EAP_FAILURE = 4;
+ // Other association rejection failures.
+ REASON_ASSOCIATION_REJECTION = 5;
+ // Associated timeout failures.
+ REASON_ASSOCIATION_TIMEOUT = 6;
+ // Other authentication failures.
+ REASON_AUTHENTICATION_FAILURE = 7;
+ // DHCP failures.
+ REASON_DHCP_FAILURE = 8;
+ // Device disconnected shortly after connection.
+ REASON_ABNORMAL_DISCONNECT = 9;
+ // AP initiated disconnect for a given duration.
+ REASON_FRAMEWORK_DISCONNECT_MBO_OCE = 10;
+ // Avoid connecting to the failed AP when trying to reconnect on other available candidates.
+ REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT = 11;
+ // The connected scorer has disconnected this network.
+ REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE = 12;
+ // The network is disabled due to absence of user credentials
+ REASON_AUTHENTICATION_NO_CREDENTIALS = 13;
+ // The network is disabled because service is not subscribed, a special kind of EAP failure.
+ REASON_AUTHENTICATION_NO_SUBSCRIPTION = 14;
+ // User disabled auto-join for this network.
+ REASON_AUTO_JOIN_DISABLED = 15;
+ }
+
+ // The reason for disabling a network.
+ optional DisableReason disable_reason = 1;
+
+ // The configuration is temporarily disabled.
+ optional bool config_temporarily_disabled = 2;
+
+ // The configuration is disabled until the user manually re-enables it.
+ optional bool config_permanently_disabled = 3;
+
+ // Reasons why 1 or more BSSIDs are temporarily disabled.
+ repeated DisableReason bssid_disable_reasons = 4;
+}
+
// Number of networks with a large change of connection/disconnection
// failure rate or high failure rate at high RSSI
message HealthMonitorFailureStats {
diff --git a/service/res/values-af/strings.xml b/service/res/values-af/strings.xml
index d4e52ba23..ff81fd344 100644
--- a/service/res/values-af/strings.xml
+++ b/service/res/values-af/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Netwerke wat deur <xliff:g id="NAME">%s</xliff:g> voorgestel is. Toestel sal dalk outomaties koppel."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Laat toe"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nee, dankie"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> wil outomaties koppel"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Hierdie netwerke ontvang \'n unieke ID wat gebruik kan word om toestelligging na te spoor"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Koppel in elk geval"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Koppel aan <xliff:g id="CARRIERNAME">%s</xliff:g>-Wi‑Fi?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Hierdie netwerke ontvang \'n SIM-ID wat gebruik kan word om toestelligging na te spoor"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Koppel"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Moenie koppel nie"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Bevestig verbinding?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"As jy koppel, kan <xliff:g id="CARRIERNAME">%s</xliff:g> se Wi‑Fi-netwerke toegang kry tot \'n unieke ID wat met jou SIM geassosieer word, of dit deel. Dit kan dit vir hulle moontlik maak om jou toestel se ligging na te spoor."</string>
diff --git a/service/res/values-am/strings.xml b/service/res/values-am/strings.xml
index 5d8bac33e..64c045ec5 100644
--- a/service/res/values-am/strings.xml
+++ b/service/res/values-am/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"በ<xliff:g id="NAME">%s</xliff:g> የተጠቆሙ አውታረ መረቦች። መሣሪያ በራስ-ሰር ሊገናኝ ይችላል።"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"ፍቀድ"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"አይ፣ አመሰግናለሁ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> በራስ-ሰር መገናኘት ይፈልጋል"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"እነዚህ አውታረ መረቦች የመሣሪያ አካባቢን ለመከታተል ሥራ ላይ ሊውል የሚችል ልዩ መታወቂያ ተቀብለዋል።"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"ለማንኛውም ተገናኝ"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"ከ<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi ጋር ይገናኙ?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"እነዚህ አውታረ መረቦች የመሣሪያ አካባቢን ለመከታተል ሥራ ላይ ሊውል የሚችል የሲም መታወቂያ ተቀብለዋል።"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"አገናኝ"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"አታገናኝ"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"ግንኙነት ይረጋገጥ?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"ከተገናኙ የ<xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi አውትረ መረቦች ከእርስዎ ሲም ጋር የተጎዳኘ ልዩ መታወቂያ ሊደርሱ ወይም ሊያጋሩ ይችላሉ። ይህ የመሣሪያዎ አካባቢ ክትትል እንዲደረግበት ሊያስችል ይችላል።"</string>
diff --git a/service/res/values-ar/strings.xml b/service/res/values-ar/strings.xml
index fd9df7420..0ca426644 100644
--- a/service/res/values-ar/strings.xml
+++ b/service/res/values-ar/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"شبكات <xliff:g id="NAME">%s</xliff:g> المقترحة - قد يتم توصيل الجهاز تلقائيًا."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"سماح"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"لا، شكرًا"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"يريد مشغِّل شبكة الجوّال <xliff:g id="CARRIERNAME">%s</xliff:g> الاتصال التلقائي بالشبكة."</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"تتلقّى هذه الشبكات معرّفًا فريدًا يمكن استخدامه لتتبُّع الموقع الجغرافي للجهاز."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"الاتصال على أي حال"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"‏هل تريد ربط <xliff:g id="CARRIERNAME">%s</xliff:g> بشبكة Wi-Fi؟"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"‏تتلقّى هذه الشبكات رقم تعريف لشريحة SIM يمكن استخدامه لتتبُّع الموقع الجغرافي للجهاز."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"ربط"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"عدم الاتصال"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"هل تريد تأكيد الاتصال بالشبكة؟"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"‏في حال اتصال بالشبكة، يمكن لشبكات Wi‑Fi من <xliff:g id="CARRIERNAME">%s</xliff:g> الوصول إلى المعرّف الفريد المرتبط بشريحة SIM أو مشاركته. قد يسمح هذا بتتبُّع الموقع الجغرافي لجهازك."</string>
diff --git a/service/res/values-as/strings.xml b/service/res/values-as/strings.xml
index 0ece64de4..a38a860c5 100644
--- a/service/res/values-as/strings.xml
+++ b/service/res/values-as/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g>এ পৰামর্শ হিচাপে দিয়া নেটৱর্কবোৰ। ডিভাইচটো স্বয়ংক্ৰিয়ভাৱে সংযোগ হ\'ব পাৰে।"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"অনুমতি দিয়ক"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"নালাগে, ধন্যবাদ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g>এ স্বয়ংক্ৰিয়ভাৱে সংযোগ কৰিবলৈ বিচাৰিছে"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"এই নেটৱৰ্কসমূহে এটা সুকীয়া আইডি পায়, যিটো ডিভাইচৰ অৱস্থান ট্ৰেক কৰিবলৈ ব্যৱহাৰ কৰিব পৰা যায়"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"যিহ’লেও সংযোগ কৰক"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> ৱাই-ফাইৰ সৈতে সংযোগ কৰিবনে?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"এই নেটৱৰ্কটোৱে এটা ছিম আইডি পায়, যিটো ডিভাইচৰ অৱস্থান ট্ৰেক কৰিবলৈ ব্যৱহাৰ কৰিব পাৰি"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"সংযোগ কৰক"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"সংযোগ নকৰিব"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"সংযোগ নিশ্চিত কৰিবনে?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"আপুনি যদি সংযোগ কৰে, <xliff:g id="CARRIERNAME">%s</xliff:g>ৰ ৱাই-ফাই নেটৱৰ্কসমূহে আপোনাৰ ছিমৰ সৈতে জড়িত এটা সুকীয়া আইডি এক্সেছ কৰিব অথবা সেইটো শ্বেয়াৰ কৰিব পাৰে। এইটোৱে আপোনাৰ ডিভাইচটোৰ অৱস্থান ট্ৰেক কৰাৰ অনুমতি দিব পাৰে।"</string>
diff --git a/service/res/values-az/strings.xml b/service/res/values-az/strings.xml
index db4015072..ae0455e02 100644
--- a/service/res/values-az/strings.xml
+++ b/service/res/values-az/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> təklif edilən şəbəkə. Cihaz avtomatik qoşula bilər."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"İcazə verin"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Xeyr, təşəkkürlər"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> avtomatik qoşulmaq istəyir"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Bu şəbəkələr cihaz məkanını izləmək üçün istifadə edilə biləcək unikal ID qəbul edir"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"İstənilən halda qoşulun"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi şəbəkəsinə qoşulsun?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Bu şəbəkələr cihaz məkanını izləmək üçün istifadə edilə biləcək SIM ID qəbul edir"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Qoşun"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Qoşulmayın"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Bağlantı təsdiq edilsin?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Qoşulsanız, <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi şəbəkələri SIM kartınızla əlaqəli unikal ID\'ə daxil ola və ya onu paylaşa bilər. Bu, cihazınızın məkanının izlənilməsinə icazə verə bilər."</string>
diff --git a/service/res/values-b+sr+Latn/strings.xml b/service/res/values-b+sr+Latn/strings.xml
index 08970f9fc..634f9a743 100644
--- a/service/res/values-b+sr+Latn/strings.xml
+++ b/service/res/values-b+sr+Latn/strings.xml
@@ -16,9 +16,9 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifiResourcesAppLabel" product="default" msgid="4965162975090543792">"Sistemski Wi-Fi resursi"</string>
+ <string name="wifiResourcesAppLabel" product="default" msgid="4965162975090543792">"Sistemski WiFi resursi"</string>
<string name="wifi_available_title" msgid="2844963247498642107">"Povežite se sa otvorenom Wi‑Fi mrežom"</string>
- <string name="wifi_available_title_connecting" msgid="4308431577637294026">"Povezuje se sa Wi-Fi mrežom..."</string>
+ <string name="wifi_available_title_connecting" msgid="4308431577637294026">"Povezuje se sa WiFi mrežom..."</string>
<string name="wifi_available_title_connected" msgid="922603556292157664">"Povezali ste se sa Wi‑Fi mrežom"</string>
<string name="wifi_available_title_failed_to_connect" msgid="2304443371893419545">"Povezivanje sa Wi‑Fi mrežom nije uspelo"</string>
<string name="wifi_available_content_failed_to_connect" msgid="3171283790496729136">"Dodirnite da biste videli sve mreže"</string>
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Mreže koje predlaže <xliff:g id="NAME">%s</xliff:g>. Uređaj će se možda povezati automatski."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Dozvoli"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ne, hvala"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> želi da se automatski poveže"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Ove mreže zahtevaju jedinstveni ID koji može da se koristi za praćenje lokacije uređaja"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Ipak poveži"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Želite da se povežete na WiFi mrežu <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Ove mreže dobijaju ID SIM kartice koji može da se koristi za praćenje lokacije uređaja"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Poveži"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ne povezuj"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Želite li da potvrdite povezivanje?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ako se povežete, Wi‑Fi mreže operatera <xliff:g id="CARRIERNAME">%s</xliff:g> mogu da pristupaju jedinstvenom ID-u povezanom sa SIM karticom ili da ga dele. To može da omogući praćenje lokacije uređaja."</string>
@@ -44,10 +44,10 @@
<string name="wifi_wakeup_onboarding_action_disable" msgid="672002169958868470">"Ne uključuj ponovo"</string>
<string name="wifi_wakeup_enabled_title" msgid="7758584632765597662">"Wi‑Fi je automatski uključen"</string>
<string name="wifi_wakeup_enabled_content" msgid="4713038331224656338">"U blizini ste sačuvane mreže: <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string>
- <string name="wifi_watchdog_network_disabled" msgid="688248897654073438">"Nije moguće povezati sa Wi-Fi mrežom"</string>
+ <string name="wifi_watchdog_network_disabled" msgid="688248897654073438">"Nije moguće povezati sa WiFi mrežom"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="2946200607682633112">" ima lošu internet vezu."</string>
<string name="wifi_connect_alert_title" msgid="6144470472092017636">"Želite li da dozvolite povezivanje?"</string>
- <string name="wifi_connect_alert_message" msgid="3123801378559831220">"Aplikacija %1$s želi da se poveže na Wi-Fi mrežu %2$s"</string>
+ <string name="wifi_connect_alert_message" msgid="3123801378559831220">"Aplikacija %1$s želi da se poveže na WiFi mrežu %2$s"</string>
<string name="wifi_connect_default_application" msgid="6164721692891325243">"Aplikacija"</string>
<string name="accept" msgid="5931271886782610829">"Prihvati"</string>
<string name="decline" msgid="6874256900873707640">"Odbij"</string>
@@ -58,9 +58,9 @@
<string name="wifi_p2p_to_message" msgid="6664932426704362946">"Kome:"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5661843905965463456">"Unesite potrebni PIN:"</string>
<string name="wifi_p2p_show_pin_message" msgid="4332876077723766909">"PIN:"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="3372859876274663802">"Tablet će privremeno prekinuti vezu sa Wi-Fi-jem dok je povezan sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="406603193215934517">"Android TV uređaj će privremeno prekinuti vezu sa Wi-Fi mrežom dok je povezan sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="2723785832319900478">"Telefon će privremeno prekinuti vezu sa Wi-Fi-jem dok je povezan sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="3372859876274663802">"Tablet će privremeno prekinuti vezu sa WiFi-em dok je povezan sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="406603193215934517">"Android TV uređaj će privremeno prekinuti vezu sa WiFi mrežom dok je povezan sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="2723785832319900478">"Telefon će privremeno prekinuti vezu sa WiFi-em dok je povezan sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="dlg_ok" msgid="3250085870426030310">"Potvrdi"</string>
<string name="wifi_cannot_connect_with_randomized_mac_title" msgid="3161171832972320854">"Povezivanje na mrežu <xliff:g id="SSID">%1$s</xliff:g> nije uspelo"</string>
<string name="wifi_cannot_connect_with_randomized_mac_message" msgid="3084495849409387375">"Dodirnite da biste promenili podešavanja privatnosti i probali ponovo"</string>
@@ -79,6 +79,6 @@
<string name="wifi_eap_error_message_code_32766" msgid="6907401733158262194">"<xliff:g id="SSID">%1$s</xliff:g>: EAP greška pri potvrdi identiteta 32766"</string>
<string name="wifi_softap_auto_shutdown_timeout_expired_title" msgid="3145323037688670043">"Hotspot je isključen"</string>
<string name="wifi_softap_auto_shutdown_timeout_expired_summary" msgid="5136282560556465701">"Nijedan uređaj nije povezan. Dodirnite da biste izmenili."</string>
- <string name="wifi_sim_required_title" msgid="8362843050699015640">"Wi-Fi veza je prekinuta"</string>
- <string name="wifi_sim_required_message" msgid="6085636103482409595">"Da biste se povezali na mrežu <xliff:g id="SSID">%1$s</xliff:g>, umetnite <xliff:g id="CARRIER_NAME">%2$s</xliff:g> SIM karticu"</string>
+ <string name="wifi_sim_required_title" msgid="8362843050699015640">"WiFi veza je prekinuta"</string>
+ <string name="wifi_sim_required_message" msgid="6085636103482409595">"Da biste se povezali na mrežu <xliff:g id="SSID">%1$s</xliff:g>, stavite <xliff:g id="CARRIER_NAME">%2$s</xliff:g> SIM karticu"</string>
</resources>
diff --git a/service/res/values-be/strings.xml b/service/res/values-be/strings.xml
index b66cb9a6c..76e9c0219 100644
--- a/service/res/values-be/strings.xml
+++ b/service/res/values-be/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Праграма \"<xliff:g id="NAME">%s</xliff:g>\" прапанавала сеткі. Прылада можа падключыцца да ніх аўтаматычна."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Дазволіць"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Не, дзякуй"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> запытвае дазвол на аўтаматычнае падключэнне"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Гэтыя сеткі атрымліваюць унікальны ідэнтыфікатар, які можа выкарыстоўвацца для адсочвання месцазнаходжання прылады"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Усё роўна падключыцца"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Падключыцца да Wi-Fi аператара \"<xliff:g id="CARRIERNAME">%s</xliff:g>\"?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Гэтыя сеткі атрымліваюць ідэнтыфікатар SIM-карты, які можа выкарыстоўвацца для адсочвання месцазнаходжання прылады"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Падключыцца"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Не падключацца"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Пацвердзіць падключэнне?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Калі вы падключыцеся, сеткі Wi‑Fi аператара \"<xliff:g id="CARRIERNAME">%s</xliff:g>\" змогуць атрымаць доступ да ўнікальнага ідэнтыфікатара, звязанага з вашай SIM-картай, ці абагуліць яго. Можа ўзнікнуць магчымасць адсочваць месцазнаходжанне вашай прылады."</string>
diff --git a/service/res/values-bg/strings.xml b/service/res/values-bg/strings.xml
index 915b7fac4..d849753b4 100644
--- a/service/res/values-bg/strings.xml
+++ b/service/res/values-bg/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Предложени от <xliff:g id="NAME">%s</xliff:g> мрежи. Устройството може да се свърже автоматично."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Разрешаване"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Не, благодаря"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> иска да се свързва автоматично"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Тези мрежи получават уникален идентификатор, който може да се използва за проследяване на местоположението на устройството"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Свързване въпреки това"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Искате ли да се свържете с Wi-Fi от <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Тези мрежи получават идентификатор за SIM карта, който може да се използва за проследяване на местоположението на устройството"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Свързване"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Без свързване"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Потвърждавате ли връзката?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ако се свържете, Wi-Fi мрежите на <xliff:g id="CARRIERNAME">%s</xliff:g> може да имат достъп или да споделят уникален идентификатор, свързан със SIM картата ви. Това може да позволи проследяването на местоположението на устройството ви."</string>
diff --git a/service/res/values-bn/strings.xml b/service/res/values-bn/strings.xml
index 6973575d2..2ca2fa95a 100644
--- a/service/res/values-bn/strings.xml
+++ b/service/res/values-bn/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g>-এর সাজেস্ট করা নেটওয়ার্ক। ডিভাইস নিজে থেকে কানেক্ট হতে পারে।"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"অনুমতি দিন"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"না থাক"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> অটোমেটিক কানেক্ট করতে চায়"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"এই নেটওয়ার্ক যে অনন্য আইডি পায় সেটি ব্যবহার করে ডিভাইসের লোকেশন ট্র্যাক করা যায়"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"তা সত্ত্বেও কানেক্ট করুন"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> ওয়াই-ফাইতে কানেক্ট করবেন?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"এই নেটওয়ার্কগুলির কাছে একটি সিম আইডি থাকে যা ব্যবহার করে এই নেটওয়ার্কের সাথে যুক্ত থাকা ডিভাইসের লোকেশন ট্র্যাক করা যেত পারে"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"কানেক্ট করুন"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"কানেক্ট করবেন না"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"কানেকশন কনফার্ম করতে চান?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"আপনি কানেক্ট করলে, <xliff:g id="CARRIERNAME">%s</xliff:g> ওয়াই-ফাই নেটওয়ার্ক আপনার সিমের সাথে সম্পর্কযুক্ত একটি অনন্য আইডি অ্যাক্সেস বা শেয়ার করতে পারে। এর ফলে আপনার ডিভাইসের লোকেশন ট্র্যাক করা যেতে পারে।"</string>
diff --git a/service/res/values-bs/strings.xml b/service/res/values-bs/strings.xml
index 2b3d563cc..1afb4a27f 100644
--- a/service/res/values-bs/strings.xml
+++ b/service/res/values-bs/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Mreže koje predlaže <xliff:g id="NAME">%s</xliff:g>. Uređaj će se možda povezati automatski."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Dozvoli"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ne, hvala"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> se želi automatski povezati"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Ove mreže primaju jedinstveni ID koji se može koristiti za praćenje lokacije uređaja"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Ipak se poveži"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Povezati se s WiFi mrežom operatera <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Ove mreže primaju ID SIM-a koji se može koristiti za praćenje lokacije uređaja"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Poveži"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Nemoj se povezati"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Potvrditi povezivanje?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ako se povežete, Wi-Fi mreže mobilnog operatera <xliff:g id="CARRIERNAME">%s</xliff:g> mogu pristupiti jedinstvenom ID-u koji je povezan s vašom SIM karticom ili ga podijeliti. Na taj način možete dozvoliti da se prati lokacija vašeg uređaja."</string>
diff --git a/service/res/values-ca/strings.xml b/service/res/values-ca/strings.xml
index d9de95fe4..84ec8989b 100644
--- a/service/res/values-ca/strings.xml
+++ b/service/res/values-ca/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Xarxes suggerides de l\'aplicació <xliff:g id="NAME">%s</xliff:g>. El dispositiu pot connectar-se automàticament."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Permet"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"No, gràcies"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"L\'operador <xliff:g id="CARRIERNAME">%s</xliff:g> vol connectar-se automàticament"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Aquestes xarxes reben un identificador únic que es pot utilitzar per fer un seguiment de la ubicació del dispositiu"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Connecta\'t de totes maneres"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Vols connectar-te a la Wi‑Fi de l\'operador <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Aquestes xarxes reben un identificador de SIM que es pot utilitzar per fer el seguiment de la ubicació del dispositiu"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Connecta"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"No et connectis"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Vols confirmar la connexió?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Si et connectes, les xarxes Wi‑Fi de l\'operador <xliff:g id="CARRIERNAME">%s</xliff:g> poden compartir un identificador únic associat a la teva SIM o bé accedir-hi. Això pot permetre que es faci un seguiment de la ubicació del teu dispositiu."</string>
diff --git a/service/res/values-cs/strings.xml b/service/res/values-cs/strings.xml
index 68b2cabb5..dcc7b9fdd 100644
--- a/service/res/values-cs/strings.xml
+++ b/service/res/values-cs/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Sítě navrhované aplikací <xliff:g id="NAME">%s</xliff:g>. Zařízení se může připojovat automaticky."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Povolit"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ne, díky"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"Operátor <xliff:g id="CARRIERNAME">%s</xliff:g> se chce automaticky připojit"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Tyto sítě dostávají jedinečné ID, pomocí něhož lze sledovat polohu zařízení"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Přesto připojit"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Připojit k Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Tyto sítě dostávají identifikátor SIM karty, pomocí něhož lze sledovat polohu zařízení"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Připojit"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Nepřipojovat"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Potvrdit připojení?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Pokud se připojíte, sítě Wi-Fi operátora <xliff:g id="CARRIERNAME">%s</xliff:g> mohou získat přístup k jedinečnému ID přidruženému k vaší SIM kartě. Může to umožnit sledování polohy zařízení."</string>
diff --git a/service/res/values-da/strings.xml b/service/res/values-da/strings.xml
index fbd9c92eb..6f388ee6a 100644
--- a/service/res/values-da/strings.xml
+++ b/service/res/values-da/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Netværk foreslået af <xliff:g id="NAME">%s</xliff:g>. Enheden opretter muligvis forbindelse automatisk."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Tillad"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nej tak"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> vil gerne oprette forbindelse automatisk"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Disse netværk modtager et unikt id, der kan bruges til at spore enhedens placering"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Opret forbindelse alligevel"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Opret forbindelse til <xliff:g id="CARRIERNAME">%s</xliff:g>-Wi-Fi"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Disse netværk kræver et SIM-id, der kan bruges til at spore enhedens placering"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Opret forbindelse"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Opret ikke forbindelse"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Vil du bekræfte forbindelsen?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Hvis du opretter forbindelse, kan Wi-Fi-netværk fra <xliff:g id="CARRIERNAME">%s</xliff:g> få adgang til eller dele et unikt id, der er knyttet til dit SIM-kort. Derved kan din enheds placering muligvis spores."</string>
diff --git a/service/res/values-de/strings.xml b/service/res/values-de/strings.xml
index 21aa00896..ad695ce07 100644
--- a/service/res/values-de/strings.xml
+++ b/service/res/values-de/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Von <xliff:g id="NAME">%s</xliff:g> vorgeschlagene Netzwerke. Gerät verbindet sich möglicherweise automatisch."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Zulassen"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nein danke"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> möchte sich automatisch verbinden"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Diese Mobilfunknetze empfangen eine eindeutige ID, mit der der Gerätestandort ermittelt werden kann"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Trotzdem verbinden"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Mit <xliff:g id="CARRIERNAME">%s</xliff:g>-WLAN verbinden?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Diese Netzwerke empfangen eine SIM-ID, mit der der Gerätestandort erfasst werden kann"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Verbinden"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Nicht verbinden"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Verbindung bestätigen?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Wenn du eine Verbindung herstellst, können die WLANs von <xliff:g id="CARRIERNAME">%s</xliff:g> möglicherweise eine eindeutige ID abrufen oder teilen, die deiner SIM zugewiesen ist. Damit lässt sich unter Umständen der Standort deines Geräts ermitteln."</string>
diff --git a/service/res/values-el/strings.xml b/service/res/values-el/strings.xml
index 0e3dd9e48..83bdbfe5c 100644
--- a/service/res/values-el/strings.xml
+++ b/service/res/values-el/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Προτεινόμενα δίκτυα <xliff:g id="NAME">%s</xliff:g>. Η συσκευή μπορεί να συνδεθεί αυτόματα."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Αποδοχή"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Όχι, ευχαριστώ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"Η εταιρεία κινητής τηλεφωνίας <xliff:g id="CARRIERNAME">%s</xliff:g> θέλει αυτόματη σύνδεση"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Αυτά τα δίκτυα λαμβάνουν ένα μοναδικό αναγνωριστικό που μπορεί να χρησιμοποιηθεί για την παρακολούθηση της τοποθεσίας της συσκευής."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Σύνδεση ούτως ή άλλως"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Σύνδεση στο Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g>;"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Αυτά τα δίκτυα λαμβάνουν ένα αναγνωριστικό SIM που μπορεί να χρησιμοποιηθεί για την παρακολούθηση της τοποθεσίας της συσκευής."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Σύνδεση"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Να μην γίνει σύνδεση."</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Επιβεβαίωση της σύνδεσης;"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Εάν συνδεθείτε, τα δίκτυα Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> ενδέχεται να έχουν πρόσβαση ή να μοιράζονται ένα μοναδικό αναγνωριστικό που σχετίζεται με την κάρτα σας SIM. Αυτό μπορεί να επιτρέψει την παρακολούθηση της τοποθεσίας της συσκευής σας."</string>
diff --git a/service/res/values-en-rAU/strings.xml b/service/res/values-en-rAU/strings.xml
index 17565bae1..43d5ce869 100644
--- a/service/res/values-en-rAU/strings.xml
+++ b/service/res/values-en-rAU/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> suggested networks. Device may connect automatically."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Allow"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"No, thanks"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> wants to auto‑connect"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"These networks receive a unique ID that can be used to track device location"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Connect anyway"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Connect to <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"These networks receive a SIM ID that can be used to track device location"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Connect"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Don\'t connect"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confirm connection?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"If you connect, <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi networks may access or share a unique ID associated with your SIM. This may allow your device\'s location to be tracked."</string>
diff --git a/service/res/values-en-rCA/strings.xml b/service/res/values-en-rCA/strings.xml
index 17565bae1..43d5ce869 100644
--- a/service/res/values-en-rCA/strings.xml
+++ b/service/res/values-en-rCA/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> suggested networks. Device may connect automatically."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Allow"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"No, thanks"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> wants to auto‑connect"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"These networks receive a unique ID that can be used to track device location"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Connect anyway"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Connect to <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"These networks receive a SIM ID that can be used to track device location"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Connect"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Don\'t connect"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confirm connection?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"If you connect, <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi networks may access or share a unique ID associated with your SIM. This may allow your device\'s location to be tracked."</string>
diff --git a/service/res/values-en-rGB/strings.xml b/service/res/values-en-rGB/strings.xml
index 17565bae1..43d5ce869 100644
--- a/service/res/values-en-rGB/strings.xml
+++ b/service/res/values-en-rGB/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> suggested networks. Device may connect automatically."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Allow"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"No, thanks"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> wants to auto‑connect"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"These networks receive a unique ID that can be used to track device location"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Connect anyway"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Connect to <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"These networks receive a SIM ID that can be used to track device location"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Connect"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Don\'t connect"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confirm connection?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"If you connect, <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi networks may access or share a unique ID associated with your SIM. This may allow your device\'s location to be tracked."</string>
diff --git a/service/res/values-en-rIN/strings.xml b/service/res/values-en-rIN/strings.xml
index 17565bae1..43d5ce869 100644
--- a/service/res/values-en-rIN/strings.xml
+++ b/service/res/values-en-rIN/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> suggested networks. Device may connect automatically."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Allow"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"No, thanks"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> wants to auto‑connect"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"These networks receive a unique ID that can be used to track device location"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Connect anyway"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Connect to <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"These networks receive a SIM ID that can be used to track device location"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Connect"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Don\'t connect"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confirm connection?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"If you connect, <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi networks may access or share a unique ID associated with your SIM. This may allow your device\'s location to be tracked."</string>
diff --git a/service/res/values-en-rXC/strings.xml b/service/res/values-en-rXC/strings.xml
deleted file mode 100644
index 22db537be..000000000
--- a/service/res/values-en-rXC/strings.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2019 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifiResourcesAppLabel" product="default" msgid="4965162975090543792">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎System Wi-Fi Resources‎‏‎‎‏‎"</string>
- <string name="wifi_available_title" msgid="2844963247498642107">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‎Connect to open Wi‑Fi network‎‏‎‎‏‎"</string>
- <string name="wifi_available_title_connecting" msgid="4308431577637294026">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎Connecting to Wi‑Fi network‎‏‎‎‏‎"</string>
- <string name="wifi_available_title_connected" msgid="922603556292157664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎Connected to Wi‑Fi network‎‏‎‎‏‎"</string>
- <string name="wifi_available_title_failed_to_connect" msgid="2304443371893419545">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎Could not connect to Wi‑Fi network‎‏‎‎‏‎"</string>
- <string name="wifi_available_content_failed_to_connect" msgid="3171283790496729136">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎Tap to see all networks‎‏‎‎‏‎"</string>
- <string name="wifi_available_action_connect" msgid="7989951293406720158">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎Connect‎‏‎‎‏‎"</string>
- <string name="wifi_available_action_all_networks" msgid="2616926772813472478">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‎All networks‎‏‎‎‏‎"</string>
- <string name="notification_channel_network_status" msgid="7808526906954286713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎Network status‎‏‎‎‏‎"</string>
- <string name="notification_channel_network_alerts" msgid="3638265846217667221">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‎Network alerts‎‏‎‎‏‎"</string>
- <string name="notification_channel_network_available" msgid="7791052175212297403">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎Network available‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_title" msgid="8724552631151189767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎Allow suggested Wi‑Fi networks?‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_content" msgid="7796523101671166285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ suggested networks. Device may connect automatically.‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‎Allow‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎No thanks‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="CARRIERNAME">%s</xliff:g>‎‏‎‎‏‏‏‎ wants to auto‑connect‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎These networks receive a unique ID that can be used to track device location‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‎‎Connect anyway‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎Don\'t connect‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎Confirm connection?‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎If you connect, ‎‏‎‎‏‏‎<xliff:g id="CARRIERNAME">%s</xliff:g>‎‏‎‎‏‏‏‎ Wi‑Fi networks may access or share a unique ID associated with your SIM. This may allow your device\'s location to be tracked.‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_confirmation" msgid="3102046304611708608">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‎‏‎‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎Connect‎‏‎‎‏‎"</string>
- <string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_confirmation" msgid="8467281276632253246">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎Don\'t connect‎‏‎‎‏‎"</string>
- <string name="wifi_wakeup_onboarding_title" msgid="8825510461478671504">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎Wi‑Fi will turn on automatically‎‏‎‎‏‎"</string>
- <string name="wifi_wakeup_onboarding_subtext" msgid="2525097093651287599">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‎When you\'re near a high quality saved network‎‏‎‎‏‎"</string>
- <string name="wifi_wakeup_onboarding_action_disable" msgid="672002169958868470">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎Don\'t turn back on‎‏‎‎‏‎"</string>
- <string name="wifi_wakeup_enabled_title" msgid="7758584632765597662">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎Wi‑Fi turned on automatically‎‏‎‎‏‎"</string>
- <string name="wifi_wakeup_enabled_content" msgid="4713038331224656338">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‎‎You\'re near a saved network: ‎‏‎‎‏‏‎<xliff:g id="NETWORK_SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="wifi_watchdog_network_disabled" msgid="688248897654073438">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‎‎Couldn\'t connect to Wi-Fi‎‏‎‎‏‎"</string>
- <string name="wifi_watchdog_network_disabled_detailed" msgid="2946200607682633112">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‎‎‎‎ has a poor internet connection.‎‏‎‎‏‎"</string>
- <string name="wifi_connect_alert_title" msgid="6144470472092017636">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‎Allow connection?‎‏‎‎‏‎"</string>
- <string name="wifi_connect_alert_message" msgid="3123801378559831220">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎Application %1$s would like to connect to Wifi Network %2$s‎‏‎‎‏‎"</string>
- <string name="wifi_connect_default_application" msgid="6164721692891325243">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎An application‎‏‎‎‏‎"</string>
- <string name="accept" msgid="5931271886782610829">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎Accept‎‏‎‎‏‎"</string>
- <string name="decline" msgid="6874256900873707640">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‎Decline‎‏‎‎‏‎"</string>
- <string name="ok" msgid="4215387532539340948">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎OK‎‏‎‎‏‎"</string>
- <string name="wifi_p2p_invitation_sent_title" msgid="6684220950195735982">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎Invitation sent‎‏‎‎‏‎"</string>
- <string name="wifi_p2p_invitation_to_connect_title" msgid="5020192895172598089">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎Invitation to connect‎‏‎‎‏‎"</string>
- <string name="wifi_p2p_from_message" msgid="3857436922001981191">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎From:‎‏‎‎‏‎"</string>
- <string name="wifi_p2p_to_message" msgid="6664932426704362946">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎To:‎‏‎‎‏‎"</string>
- <string name="wifi_p2p_enter_pin_message" msgid="5661843905965463456">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎Type the required PIN:‎‏‎‎‏‎"</string>
- <string name="wifi_p2p_show_pin_message" msgid="4332876077723766909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎PIN:‎‏‎‎‏‎"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="3372859876274663802">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‎The tablet will temporarily disconnect from Wi-Fi while it\'s connected to ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="406603193215934517">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‎Your Android TV device will temporarily disconnect from Wi-Fi while it\'s connected to ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="2723785832319900478">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎The phone will temporarily disconnect from Wi-Fi while it\'s connected to ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="dlg_ok" msgid="3250085870426030310">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎OK‎‏‎‎‏‎"</string>
- <string name="wifi_cannot_connect_with_randomized_mac_title" msgid="3161171832972320854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎Can\'t connect to ‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="wifi_cannot_connect_with_randomized_mac_message" msgid="3084495849409387375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‎Tap to change privacy settings and retry‎‏‎‎‏‎"</string>
- <string name="wifi_disable_mac_randomization_dialog_title" msgid="7200723795776228456">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎Change privacy setting?‎‏‎‎‏‎"</string>
- <string name="wifi_disable_mac_randomization_dialog_message" msgid="6780528750693169829">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎To connect, ‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ needs to use your device MAC address, a unique identifier. Currently, your privacy setting for this network uses a randomized identifier. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎This change may allow your device\'s location to be tracked by nearby devices.‎‏‎‎‏‎"</string>
- <string name="wifi_disable_mac_randomization_dialog_confirm_text" msgid="6592972299988727403">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎Change setting‎‏‎‎‏‎"</string>
- <string name="wifi_disable_mac_randomization_dialog_success" msgid="7288972191769783828">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‎Setting updated. Try connecting again.‎‏‎‎‏‎"</string>
- <string name="wifi_disable_mac_randomization_dialog_failure" msgid="1823128152758990275">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎Can\'t change privacy setting‎‏‎‎‏‎"</string>
- <string name="wifi_disable_mac_randomization_dialog_network_not_found" msgid="2352188098110676023">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎Network not found‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32760" msgid="2272296327034079386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : EAP authentication error 32760‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32761" msgid="3110197168451423384">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : EAP authentication error 32761‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32762" msgid="3515553222282833794">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : EAP authentication error 32762‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32763" msgid="3790937365887990781">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : EAP authentication error 32763‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32764" msgid="6883041845648321423">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : EAP authentication error 32764‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32765" msgid="3134805513440435314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : EAP authentication error 32765‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32766" msgid="6907401733158262194">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : EAP authentication error 32766‎‏‎‎‏‎"</string>
- <string name="wifi_softap_auto_shutdown_timeout_expired_title" msgid="3145323037688670043">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎Hotspot turned off‎‏‎‎‏‎"</string>
- <string name="wifi_softap_auto_shutdown_timeout_expired_summary" msgid="5136282560556465701">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎No devices connected. Tap to modify.‎‏‎‎‏‎"</string>
- <string name="wifi_sim_required_title" msgid="8362843050699015640">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‎‎‎Wi‑Fi disconnected‎‏‎‎‏‎"</string>
- <string name="wifi_sim_required_message" msgid="6085636103482409595">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎To connect to ‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎, insert a ‎‏‎‎‏‏‎<xliff:g id="CARRIER_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎ SIM‎‏‎‎‏‎"</string>
-</resources>
diff --git a/service/res/values-es-rUS/strings.xml b/service/res/values-es-rUS/strings.xml
index 615d844ce..a512dc40d 100644
--- a/service/res/values-es-rUS/strings.xml
+++ b/service/res/values-es-rUS/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> sugirió redes. Es posible que el dispositivo se conecte automáticamente."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Permitir"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"No, gracias"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> quiere conectarse automáticamente"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Estas redes reciben un ID único que puede usarse para realizar el seguimiento de la ubicación del dispositivo"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Conectar de todos modos"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"¿Quieres conectarte a la red Wi-Fi de <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Estas redes reciben un ID de SIM que puede usarse para realizar el seguimiento de la ubicación del dispositivo"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Conectar"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"No conectar"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"¿Confirmar conexión?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Si te conectas, las redes de Wi-Fi de <xliff:g id="CARRIERNAME">%s</xliff:g> podrán acceder o compartir un ID único asociado con tu SIM. Esto podría permitir que se realice el seguimiento de la ubicación del dispositivo."</string>
diff --git a/service/res/values-es/strings.xml b/service/res/values-es/strings.xml
index 29a33b290..4695bd075 100644
--- a/service/res/values-es/strings.xml
+++ b/service/res/values-es/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> te ha sugerido alguna red. El dispositivo puede que se conecte automáticamente."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Permitir"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"No, gracias"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> quiere conectarse automáticamente"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Estas redes reciben un ID único con el que se puede rastrear la ubicación del dispositivo"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Conectar de todos modos"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"¿Conectarse a la red Wi‑Fi de <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Estas redes reciben un ID de SIM con el que se puede rastrear la ubicación del dispositivo"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Conectar"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"No conectar"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"¿Confirmar conexión?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Si te conectas, es posible que la red Wi‑Fi de <xliff:g id="CARRIERNAME">%s</xliff:g> obtenga o comparta un ID único asociado a tu SIM, lo que puede permitir que se rastree la ubicación de tu dispositivo."</string>
diff --git a/service/res/values-et/strings.xml b/service/res/values-et/strings.xml
index f0785b533..00713b6d2 100644
--- a/service/res/values-et/strings.xml
+++ b/service/res/values-et/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Rakenduse <xliff:g id="NAME">%s</xliff:g> soovitatud võrgud. Seade võib automaatselt ühenduse luua."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Luba"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Tänan, ei"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> soovib automaatselt ühenduse luua"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Need võrgud saavad kordumatu ID, mida saab kasutada seadme asukoha jälgimiseks."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Ühenda siiski"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Kas luua ühendus operaatori <xliff:g id="CARRIERNAME">%s</xliff:g> WiFi-võrguga?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Need võrgud saavad SIM-i ID, mida saab kasutada seadme asukoha jälgimiseks."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Ühenda"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ära ühenda"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Kas soovite ühenduse kinnitada?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Kui loote ühenduse, võivad operaatori <xliff:g id="CARRIERNAME">%s</xliff:g> WiFi-võrgud teie SIM-kaardiga seotud kordumatule ID-le juurde pääseda või seda jagada. See võib võimaldada seadme asukohta jälgida."</string>
diff --git a/service/res/values-eu/strings.xml b/service/res/values-eu/strings.xml
index 822d724e1..ccb1d3328 100644
--- a/service/res/values-eu/strings.xml
+++ b/service/res/values-eu/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> aplikazioak sare batzuk iradoki ditu. Baliteke gailua automatikoki konektatzea."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Baimendu"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ez, eskerrik asko"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> operadoreak automatikoki konektatu nahi du"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Sare hauek ID esklusibo bat jasotzen dute, gailuaren kokapenaren jarraipena egin ahal izateko"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Konektatu halere"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> operadorearen wifi-sarera konektatu nahi duzu?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Sare hauek SIM ID bat jasotzen dute, gailuaren kokapenaren jarraipena egin ahal izateko"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Konektatu"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ez konektatu"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Konexioa berretsi nahi duzu?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Konektatzen bazara, baliteke <xliff:g id="CARRIERNAME">%s</xliff:g> operadorearen wifi-sareek zure SIM txartelarekin lotutako ID esklusiboa atzitzea edo partekatzea. Horrela, baliteke zure gailuaren kokapenaren jarraipena egiteko aukera izatea."</string>
@@ -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-fa/strings.xml b/service/res/values-fa/strings.xml
index b6d01396f..739b5c4ff 100644
--- a/service/res/values-fa/strings.xml
+++ b/service/res/values-fa/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"شبکه‌های پیشنهادی <xliff:g id="NAME">%s</xliff:g>. ممکن است دستگاه به‌طور خودکار متصل شود."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"مجاز"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"نه متشکرم"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> می‌خواهد به‌طور خودکار متصل شود"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"این شبکه‌ها شناسه یکتایی دریافت می‌کنند که می‌توانید از آن برای ردیابی مکان دستگاه استفاده کرد"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"درهر صورت متصل شود"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"‏به Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> متصل می‌شوید؟"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"این شبکه‌ها شناسه سیم‌کارتی دریافت می‌کنند که می‌توان از آن برای ردیابی مکان دستگاه استفاده کرد"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"اتصال"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"متصل نشود"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"اتصال را تأیید می‌کنید؟"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"‏اگر متصل شوید، شبکه‌های Wi‑Fi <xliff:g id="CARRIERNAME">%s</xliff:g> می‌توانند به شناسه یکتای مربوط به سیم‌کارتتان دسترسی پیدا کنند و از آن به‌صورت مشترک استفاده کنند. این کار ممکن است ردیابی مکان دستگاه را مجاز کند."</string>
@@ -70,13 +70,13 @@
<string name="wifi_disable_mac_randomization_dialog_success" msgid="7288972191769783828">"تنظیم به‌روزرسانی شد. دوباره متصل شوید."</string>
<string name="wifi_disable_mac_randomization_dialog_failure" msgid="1823128152758990275">"تنظیم حریم‌خصوصی تغییر نکرد"</string>
<string name="wifi_disable_mac_randomization_dialog_network_not_found" msgid="2352188098110676023">"شبکه‌ای پیدا نشد"</string>
- <string name="wifi_eap_error_message_code_32760" msgid="2272296327034079386">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۰ احراز هویت EAP"</string>
- <string name="wifi_eap_error_message_code_32761" msgid="3110197168451423384">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۱ احراز هویت EAP"</string>
- <string name="wifi_eap_error_message_code_32762" msgid="3515553222282833794">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۲ احراز هویت EAP"</string>
- <string name="wifi_eap_error_message_code_32763" msgid="3790937365887990781">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۳ احراز هویت EAP"</string>
- <string name="wifi_eap_error_message_code_32764" msgid="6883041845648321423">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۴ احراز هویت EAP"</string>
- <string name="wifi_eap_error_message_code_32765" msgid="3134805513440435314">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۵ احراز هویت EAP"</string>
- <string name="wifi_eap_error_message_code_32766" msgid="6907401733158262194">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۶ احراز هویت EAP"</string>
+ <string name="wifi_eap_error_message_code_32760" msgid="2272296327034079386">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۰ اصالت‌سنجی EAP"</string>
+ <string name="wifi_eap_error_message_code_32761" msgid="3110197168451423384">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۱ اصالت‌سنجی EAP"</string>
+ <string name="wifi_eap_error_message_code_32762" msgid="3515553222282833794">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۲ اصالت‌سنجی EAP"</string>
+ <string name="wifi_eap_error_message_code_32763" msgid="3790937365887990781">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۳ اصالت‌سنجی EAP"</string>
+ <string name="wifi_eap_error_message_code_32764" msgid="6883041845648321423">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۴ اصالت‌سنجی EAP"</string>
+ <string name="wifi_eap_error_message_code_32765" msgid="3134805513440435314">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۵ اصالت‌سنجی EAP"</string>
+ <string name="wifi_eap_error_message_code_32766" msgid="6907401733158262194">"‏<xliff:g id="SSID">%1$s</xliff:g> : خطای ۳۲۷۶۶ اصالت‌سنجی EAP"</string>
<string name="wifi_softap_auto_shutdown_timeout_expired_title" msgid="3145323037688670043">"نقطه اتصال خاموش شد"</string>
<string name="wifi_softap_auto_shutdown_timeout_expired_summary" msgid="5136282560556465701">"هیچ دستگاهی متصل نیست. برای اصلاح ضربه بزنید."</string>
<string name="wifi_sim_required_title" msgid="8362843050699015640">"‏Wi-Fi قطع شد."</string>
diff --git a/service/res/values-fi/strings.xml b/service/res/values-fi/strings.xml
index 583ec424c..8efc7df40 100644
--- a/service/res/values-fi/strings.xml
+++ b/service/res/values-fi/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> ehdotti verkkoja. Laite voi muodostaa yhteyden automaattisesti."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Salli"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ei kiitos"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> haluaa muodostaa yhteyden automaattisesti"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Nämä verkot saavat yksilöllisen tunnuksen, jolla laitteen sijaintia voi seurata."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Yhdistä silti"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Yhdistetäänkö Wi-Fi-verkkoon (<xliff:g id="CARRIERNAME">%s</xliff:g>)?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Nämä verkot saavat SIM-tunnuksen, jolla voidaan seurata laitteen sijaintia."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Yhdistä"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Älä yhdistä"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Vahvistetaanko yhteys?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Jos muodostat yhteyden, Wi-Fi-verkot (<xliff:g id="CARRIERNAME">%s</xliff:g>) voivat nähdä tai jakaa yksilöllisen tunnuksen, joka liittyy SIM-korttiisi. Tämän kautta laitteesi sijaintia voidaan seurata."</string>
diff --git a/service/res/values-fr-rCA/strings.xml b/service/res/values-fr-rCA/strings.xml
index 3a34f3cc9..938c2d5ca 100644
--- a/service/res/values-fr-rCA/strings.xml
+++ b/service/res/values-fr-rCA/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Réseaux suggérés par <xliff:g id="NAME">%s</xliff:g>. L\'appareil peut s\'y connecter automatiquement."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Autoriser"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Non merci"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> souhaite se connecter automatiquement"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Ces réseaux reçoivent un identifiant unique qui peut être utilisé pour faire le suivi de la position de l\'appareil"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Se connecter sans même"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Connexion au Wi-Fi de <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Ces réseaux reçoivent un identifiant SIM qui peut être utilisé pour faire le suivi de la position de l\'appareil"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Connecter"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ne pas se connecter"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confirmer la connexion?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Si vous vous connectez, les réseaux Wi-Fi de <xliff:g id="CARRIERNAME">%s</xliff:g> pourront accéder à un identifiant unique associé à votre module SIM ou partager cet identifiant. Cela pourrait permettre à d\'autres appareils de faire le suivi de la position de votre appareil."</string>
diff --git a/service/res/values-fr/strings.xml b/service/res/values-fr/strings.xml
index 62999cc31..6949a3327 100644
--- a/service/res/values-fr/strings.xml
+++ b/service/res/values-fr/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Réseaux suggérés par <xliff:g id="NAME">%s</xliff:g>. L\'appareil pourra se connecter automatiquement."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Autoriser"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Non, merci"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> souhaite se connecter automatiquement"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Ces réseaux reçoivent un identifiant unique qui peut être utilisé pour suivre la position de l\'appareil"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Connecter quand même"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Se connecter au Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> ?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Ces réseaux reçoivent un ID de SIM qui peut être utilisé pour suivre la position de l\'appareil"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Se connecter"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ne pas connecter"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confirmer la connexion ?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Si vous établissez la connexion, les réseaux Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> peuvent accéder à un identifiant unique associé à votre carte SIM ou le partager. Suite à cette connexion, la position de votre appareil peut également d\'être suivie."</string>
diff --git a/service/res/values-gl/strings.xml b/service/res/values-gl/strings.xml
index 71fd10f38..45cb1e440 100644
--- a/service/res/values-gl/strings.xml
+++ b/service/res/values-gl/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Redes suxeridas de <xliff:g id="NAME">%s</xliff:g>. O dispositivo pode conectarse automaticamente."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Permitir"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Non, grazas"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> quere conectarse automaticamente"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Estas redes reciben un código exclusivo que se pode usar para facer un seguimento da localización dun dispositivo"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Conectar igualmente"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Quéreste conectar á rede wifi de <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Estas redes reciben un código SIM que se pode usar para facer un seguimento da localización do dispositivo"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Conectar"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Non conectar"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Queres confirmar a conexión?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Se te conectas, as redes wifi de <xliff:g id="CARRIERNAME">%s</xliff:g> poden acceder a un código exclusivo asociado coa túa SIM ou ben compartilo. Deste xeito, pódese facer un seguimento da localización do teu dispositivo."</string>
diff --git a/service/res/values-gu/strings.xml b/service/res/values-gu/strings.xml
index 634199ead..facd8427a 100644
--- a/service/res/values-gu/strings.xml
+++ b/service/res/values-gu/strings.xml
@@ -31,18 +31,18 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> સૂચવેલા નેટવર્ક. ડિવાઇસ ઑટોમૅટિક રીતે કનેક્ટ થાય તેમ બની શકે છે."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"મંજૂરી આપો"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"ના, આભાર"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> ઑટોમૅટિક રીતે કનેક્ટ કરવા માગે છે"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"આ નેટવર્કને અજોડ ID મળે છે કે જેનો ઉપયોગ ડિવાઇસના સ્થાનને ટ્રૅક કરવા માટે થઈ શકે છે"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"કોઈપણ રીતે કનેક્ટ કરો"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> વાઇ-ફાઇ સાથે કનેક્ટ કરીએ?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"આ બધા નેટવર્કને સિમ ID મળે છે કે જેનો ઉપયોગ ડિવાઇસના સ્થાનને ટ્રૅક કરવા માટે થઈ શકે છે"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"કનેક્ટ કરો"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"કનેક્ટ કરશો નહીં"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"કનેક્શનને કન્ફર્મ કરીએ?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"જો તમે કનેક્ટ કરો છો, તો <xliff:g id="CARRIERNAME">%s</xliff:g> વાઇ-ફાઇ નેટવર્ક, તમારા SIM સાથે સંકળાયેલા અજોડ IDને ઍક્સેસ અથવા શેર કરી શકે છે. આમ કરવાથી તમારા ડિવાઇસનું સ્થાન ટ્રૅક કરવાની મંજૂરી આપવામાં આવી શકે છે."</string>
<string name="wifi_suggestion_action_allow_imsi_privacy_exemption_confirmation" msgid="3102046304611708608">"કનેક્ટ કરો"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_confirmation" msgid="8467281276632253246">"કનેક્ટ કરશો નહીં"</string>
- <string name="wifi_wakeup_onboarding_title" msgid="8825510461478671504">"વાઇ-ફાઇ આપમેળે ચાલુ થઈ જશે"</string>
+ <string name="wifi_wakeup_onboarding_title" msgid="8825510461478671504">"વાઇ-ફાઇ ઑટોમૅટિક રીતે ચાલુ થઈ જશે"</string>
<string name="wifi_wakeup_onboarding_subtext" msgid="2525097093651287599">"જ્યારે તમે એક ઉચ્ચ ક્વૉલિટીવાળા સાચવેલ નેટવર્કની નજીક હોવ"</string>
<string name="wifi_wakeup_onboarding_action_disable" msgid="672002169958868470">"પાછું ચાલુ કરશો નહીં"</string>
- <string name="wifi_wakeup_enabled_title" msgid="7758584632765597662">"વાઇ-ફાઇ આપમેળે ચાલુ થયું"</string>
+ <string name="wifi_wakeup_enabled_title" msgid="7758584632765597662">"વાઇ-ફાઇ ઑટોમૅટિક રીતે ચાલુ થયું"</string>
<string name="wifi_wakeup_enabled_content" msgid="4713038331224656338">"તમે એક સાચવેલ નેટવર્કની નજીકમાં છો: <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string>
<string name="wifi_watchdog_network_disabled" msgid="688248897654073438">"વાઇ-ફાઇ સાથે કનેક્ટ કરી શકાયું નથી"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="2946200607682633112">" આમનું ઇન્ટરનેટ કનેક્શન નબળું છે."</string>
diff --git a/service/res/values-hi/strings.xml b/service/res/values-hi/strings.xml
index 05c9b6877..dabcd3e1c 100644
--- a/service/res/values-hi/strings.xml
+++ b/service/res/values-hi/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> के सुझाए गए नेटवर्क. डिवाइस अपने आप कनेक्ट हो सकता है."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"अनुमति दें"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"रहने दें"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> अपने-आप कनेक्ट करना चाहता है"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"इन नेटवर्क को एक विशेष आईडी दिया जाता है जिसका इस्तेमाल डिवाइस की जगह की जानकारी का पता लगाने के लिए किया जा सकता है"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"फिर भी कनेक्ट करें"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> वाई-फ़ाई से कनेक्ट करना चाहते हैं?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"इन नेटवर्क को एक सिम आईडी दिया जाता है जिसका इस्तेमाल डिवाइस की जगह की जानकारी का पता लगाने के लिए किया जा सकता है"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"कनेक्ट करें"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"कनेक्ट न करें"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"कनेक्शन की पुष्टि करना चाहते हैं?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"अगर आप कनेक्ट करते हैं, तो <xliff:g id="CARRIERNAME">%s</xliff:g> वाई-फ़ाई नेटवर्क आपकी सिम से जुड़े हुए विशेष आईडी को ऐक्सेस या शेयर कर सकता है. इससे आपके डिवाइस की जगह की जानकारी का पता लगा सकते हैं."</string>
diff --git a/service/res/values-hr/strings.xml b/service/res/values-hr/strings.xml
index 8ebbcad2f..1c5fa897a 100644
--- a/service/res/values-hr/strings.xml
+++ b/service/res/values-hr/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Mreže koje predlaže aplikacija <xliff:g id="NAME">%s</xliff:g>. Uređaji se mogu povezati automatski."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Dopusti"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ne, hvala"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> se želi automatski povezati"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Te mreže primaju jedinstveni ID koji se može upotrijebiti za praćenje lokacije uređaja"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Svejedno poveži"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Želite li se povezati s Wi-Fijem mobilnog operatera <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Ove mreže primaju ID SIM-a koji se može upotrijebiti za praćenje lokacije uređaja"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Poveži"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Nemoj povezati"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Želite li potvrditi povezivanje?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ako se povežete, Wifi mreže operatera <xliff:g id="CARRIERNAME">%s</xliff:g> mogu pristupiti jedinstvenom ID-ju povezanom s vašim SIM-om ili ga podijeliti. To može omogućiti praćenje lokacije vašeg uređaja."</string>
diff --git a/service/res/values-hu/strings.xml b/service/res/values-hu/strings.xml
index 92260fc37..a8e562be4 100644
--- a/service/res/values-hu/strings.xml
+++ b/service/res/values-hu/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"A(z) <xliff:g id="NAME">%s</xliff:g> hálózatokat javasolt. Az eszköz automatikusan csatlakozhat hozzájuk."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Engedélyezés"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nem, köszönöm"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"A(z) <xliff:g id="CARRIERNAME">%s</xliff:g> automatikusan csatlakozni szeretne"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Ezek a hálózatok egyedi azonosítót kapnak, amelyek az eszköz helyadatainak követésére használhatók"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Csatlakozás mindenképp"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Csatlakozni szeretne a(z) <xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi-hálózathoz?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Ezek a hálózatok SIM-azonosítót kapnak, amely felhasználható az eszköz helyadatainak követésére"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Csatlakozás"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ne csatlakozzon"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Biztosan csatlakozik?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ha csatlakozik, a(z) <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi-hálózatai hozzáférhetnek a SIM-hez társított egyedi azonosítóhoz, amelyet meg is oszthatnak. Ez lehetővé teheti eszköze helyadatainak követését."</string>
diff --git a/service/res/values-hy/strings.xml b/service/res/values-hy/strings.xml
index 9dea80e28..3e60ba0c7 100644
--- a/service/res/values-hy/strings.xml
+++ b/service/res/values-hy/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> հավելվածի առաջարկվող ցանցեր: Սարքը կարող է ավտոմատ միանալ:"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Թույլատրել"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ոչ, շնորհակալություն"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g>-ը հայցում է ավտոմատ միանալու թույլտվություն"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Այս ցանցերը ստանում են եզակի ID, որը կարող է օգտագործվել սարքի տեղադրությունը հետագծելու համար։"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Միանալ"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Միանա՞լ <xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi ցանցին"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Այս ցանցերը ստանում են SIM քարտի ID, որը կարող է օգտագործվել սարքի տեղադրությունը հետագծելու համար։"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Միանալ"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Չմիանալ"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Հաստատե՞լ միացումը"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Միանալու դեպքում <xliff:g id="CARRIERNAME">%s</xliff:g>-ի Wi‑Fi ցանցերը կարող են ստանալ ձեր SIM քարտի հետ կապված եզակի ID-ն կամ կիսվել դրանով։ Դա հնարավորություն կտա հետագծել ձեր սարքի տեղադրությունը։"</string>
@@ -57,11 +57,11 @@
<string name="wifi_p2p_from_message" msgid="3857436922001981191">"Ուղարկող`"</string>
<string name="wifi_p2p_to_message" msgid="6664932426704362946">"Ում`"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5661843905965463456">"Մուտքագրեք պահանջվող PIN-ը:"</string>
- <string name="wifi_p2p_show_pin_message" msgid="4332876077723766909">"PIN-ը`"</string>
+ <string name="wifi_p2p_show_pin_message" msgid="4332876077723766909">"PIN-ը՝"</string>
<string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="3372859876274663802">"Գրասալիկը ժամանակավորապես կանջատվի Wi-Fi-ից, քանի դեռ այն կապակցված է <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ին"</string>
<string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="406603193215934517">"Ձեր Android TV սարքը ժամանակավորապես կանջատվի Wi-Fi-ից, քանի դեռ այն միացված է <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ին"</string>
<string name="wifi_p2p_frequency_conflict_message" product="default" msgid="2723785832319900478">"Հեռախոսը ժամանակավորապես կանջատվի Wi-Fi-ից, քանի դեռ այն միացված է <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ին"</string>
- <string name="dlg_ok" msgid="3250085870426030310">"Հաստատել"</string>
+ <string name="dlg_ok" msgid="3250085870426030310">"Եղավ"</string>
<string name="wifi_cannot_connect_with_randomized_mac_title" msgid="3161171832972320854">"Չհաջողվեց միանալ <xliff:g id="SSID">%1$s</xliff:g> սարքին"</string>
<string name="wifi_cannot_connect_with_randomized_mac_message" msgid="3084495849409387375">"Հպեք՝ գաղտնիության կարգավորումները փոփոխելու և նորից փորձելու համար։"</string>
<string name="wifi_disable_mac_randomization_dialog_title" msgid="7200723795776228456">"Փոխե՞լ գաղտնիության կարգավորումը"</string>
diff --git a/service/res/values-in/strings.xml b/service/res/values-in/strings.xml
index cfe925408..70fd8af48 100644
--- a/service/res/values-in/strings.xml
+++ b/service/res/values-in/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Jaringan yang disarankan <xliff:g id="NAME">%s</xliff:g>. Perangkat dapat terhubung secara otomatis."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Izinkan"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Lain kali"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> ingin terhubung otomatis"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Jaringan berikut menerima ID unik yang dapat digunakan untuk melacak lokasi perangkat"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Tetap hubungkan"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Hubungkan ke Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Jaringan ini menerima ID SIM yang dapat digunakan untuk melacak lokasi perangkat"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Hubungkan"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Jangan hubungkan"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Konfirmasi koneksi?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Jika Anda menghubungkan, jaringan Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> mungkin mengakses atau membagikan ID unik terkait dengan SIM Anda. Ini memungkinkan lokasi perangkat Anda untuk dilacak."</string>
diff --git a/service/res/values-is/strings.xml b/service/res/values-is/strings.xml
index 28819cc96..c60e883b2 100644
--- a/service/res/values-is/strings.xml
+++ b/service/res/values-is/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> kom með tillögur að netkerfum. Tækið gæti tengst sjálfkrafa."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Leyfa"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nei, takk"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> vill tengjast sjálfkrafa"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Þessi net fá einkvæmt auðkenni sem hægt er að nota til að rekja staðsetningu tækisins"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Tengjast samt"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Tengjast við <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Þessi net fá SIM-auðkenni sem hægt er að nota til að rekja staðsetningu tækisins"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Tengja"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ekki tengjast"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Staðfesta tengingu?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ef þú tengist geta Wi-Fi net <xliff:g id="CARRIERNAME">%s</xliff:g> fengið aðgang að eða deilt einkvæmu auðkenni sem er tengt SIM-kortinu þínu. Með þessu er hugsanlega hægt að rekja staðsetningu tækisins þíns."</string>
diff --git a/service/res/values-it/strings.xml b/service/res/values-it/strings.xml
index 84240d7d3..f675f7e89 100644
--- a/service/res/values-it/strings.xml
+++ b/service/res/values-it/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> ha suggerito delle reti. Il dispositivo potrebbe collegarsi automaticamente."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Consenti"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"No, grazie"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> vuole connettersi automaticamente"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Queste reti ricevono un ID univoco che può essere usato per monitorare la posizione del dispositivo"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Connetti comunque"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Vuoi connetterti alla rete Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Queste reti ricevono un ID SIM che può essere usato per monitorare la posizione del dispositivo"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Connetti"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Non connettere"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confermi la connessione?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Se esegui la connessione, le reti Wi-Fi di <xliff:g id="CARRIERNAME">%s</xliff:g> potranno accedere o condividere un ID univoco associato alla tua SIM. Questa azione potrebbe consentire il monitoraggio della posizione del tuo dispositivo."</string>
diff --git a/service/res/values-iw/strings.xml b/service/res/values-iw/strings.xml
index 51e043292..ad8fc46d9 100644
--- a/service/res/values-iw/strings.xml
+++ b/service/res/values-iw/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"הצעות לרשתות <xliff:g id="NAME">%s</xliff:g>. ייתכן שחיבור המכשיר ייעשה באופן אוטומטי."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"אישור"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"לא תודה"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> רוצה להתחבר אוטומטית"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"רשתות אלה מקבלות מזהה ייחודי שבו ניתן להשתמש למעקב אחר מיקום של מכשיר"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"יש להתחבר בכל זאת"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"‏האם להתחבר ל-Wi-Fi של <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"‏רשתות אלה מקבלות מזהה SIM שיכול לשמש למעקב אחר מיקום של מכשיר"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"חיבור"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"אין להתחבר"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"לאשר את ההתחברות?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"‏אם תתבצע התחברות, ייתכן שרשתות Wi‑Fi של <xliff:g id="CARRIERNAME">%s</xliff:g> יקבלו גישה או ישתפו מזהה ייחודי שמשויך לכרטיס ה-SUM שלך. בעקבות זאת, ייתכן שניתן יהיה לעקוב אחר מיקום המכשיר שלך."</string>
@@ -77,7 +77,7 @@
<string name="wifi_eap_error_message_code_32764" msgid="6883041845648321423">"‏<xliff:g id="SSID">%1$s</xliff:g> : שגיאה 32764 באימות EAP"</string>
<string name="wifi_eap_error_message_code_32765" msgid="3134805513440435314">"‏<xliff:g id="SSID">%1$s</xliff:g> : שגיאה 32765 באימות EAP"</string>
<string name="wifi_eap_error_message_code_32766" msgid="6907401733158262194">"‏<xliff:g id="SSID">%1$s</xliff:g> : שגיאה 32766 באימות EAP"</string>
- <string name="wifi_softap_auto_shutdown_timeout_expired_title" msgid="3145323037688670043">"נקודה לשיתוף אינטרנט נכבתה"</string>
+ <string name="wifi_softap_auto_shutdown_timeout_expired_title" msgid="3145323037688670043">"‏נקודת האינטרנט (hotspot) נכבתה"</string>
<string name="wifi_softap_auto_shutdown_timeout_expired_summary" msgid="5136282560556465701">"אין מכשירים מחוברים. יש להקיש כדי לשנות."</string>
<string name="wifi_sim_required_title" msgid="8362843050699015640">"‏Wi-Fi מנותק"</string>
<string name="wifi_sim_required_message" msgid="6085636103482409595">"‏יש להכניס SIM של <xliff:g id="CARRIER_NAME">%2$s</xliff:g> כדי להתחבר אל <xliff:g id="SSID">%1$s</xliff:g>"</string>
diff --git a/service/res/values-ja/strings.xml b/service/res/values-ja/strings.xml
index 95be7faf6..e494dbd8c 100644
--- a/service/res/values-ja/strings.xml
+++ b/service/res/values-ja/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> からのネットワーク候補に、デバイスが自動的に接続される可能性があります。"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"許可"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"許可しない"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> が自動接続をリクエストしています"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"これらのネットワークは一意の ID を受信します。この ID を使ってデバイスの位置情報が追跡される可能性があります"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"接続する"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> のWi-Fi に接続しますか?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"これらのネットワークは SIM ID を受信します。この ID を使ってデバイスの位置情報が追跡される可能性があります"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"接続"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"接続しない"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"接続を確認しますか?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"接続すると、<xliff:g id="CARRIERNAME">%s</xliff:g> の Wi‑Fi ネットワークが、SIM に関連付けられている一意の ID にアクセスしたりその ID を共有したりする可能性があります。これにより、デバイスの位置情報が追跡される可能性もあります。"</string>
diff --git a/service/res/values-ka/strings.xml b/service/res/values-ka/strings.xml
index 83d9b7891..7e12bcc7f 100644
--- a/service/res/values-ka/strings.xml
+++ b/service/res/values-ka/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> შემოთავაზებული ქსელები. მოწყობილობა შეიძლება ავტომატურად დაუკავშირდეს."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"დაშვება"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"არა, გმადლობთ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g>-ს ავტომატურად დაკავშირება სურს"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"ეს ქსელები იღებს უნიკალურ ID-ს, რომლის მეშვეობითაც შესაძლებელია მოწყობილობის მდებარეობის აღნუსხვა"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"მაინც დაკავშირება"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"დაუკავშირდებით <xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi-ს?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"ეს ქსელები მიიღებს SIM-ის ID-ს, რომლის მეშვეობითაც შესაძლებელია მოწყობილობის მდებარეობაზე თვალის დევნება."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"დაკავშირება"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"არ დაუკავშირდეს"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"გსურთ, დაადასტუროთ დაკავშირება?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"დაკავშირების შემთხვევაში, <xliff:g id="CARRIERNAME">%s</xliff:g>-ის Wi‑Fi ქსელებმა შეიძლება წვდომა იქონიოს ან გააზიაროს უნიკალური ID, რომელიც თქვენს SIM-ბარათთან არის ასოცირებული. ამ ცვლილებამ შესაძლოა თქვენი მოწყობილობის მდებარეობა აღნუსხვადი გახადოს."</string>
diff --git a/service/res/values-kk/strings.xml b/service/res/values-kk/strings.xml
index 5df34c119..0b7a57338 100644
--- a/service/res/values-kk/strings.xml
+++ b/service/res/values-kk/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> ұсынған желілер. Құрылғы автоматты түрде қосылуы мүмкін."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Рұқсат беру"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Жоқ, рақмет"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> автоматты түрде қосылғысы келеді"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Бұл желілер бірегей идентификатор алады, оны құрылғының орналасқан жерін бақылау үшін қолдануға болады."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Бәрібір қосылу"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> қызметі Wi‑Fi желісімен байланыстырылсын ба?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Бұл желілер SIM идентификаторын алады, оны құрылғының орналасқан жерін бақылау үшін қолдануға болады."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Байланыстыру"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Қосылмау"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Қосылымды растайсыз ба?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Егер қосылсаңыз, <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi желілері SIM картаңызға байланыстырылған бірегей идентификаторды пайдалана немесе бөлісе алады. Оның көмегімен құрылғыңыздың орнын қадағалауға болады."</string>
diff --git a/service/res/values-km/strings.xml b/service/res/values-km/strings.xml
index 143d9fd13..3a0c18b16 100644
--- a/service/res/values-km/strings.xml
+++ b/service/res/values-km/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"បណ្ដាញ​ដែលបាន​ណែនាំ​របស់ <xliff:g id="NAME">%s</xliff:g> ។ ឧបករណ៍​អាច​ភ្ជាប់​ដោយស្វ័យប្រវត្តិ។"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"អនុញ្ញាត"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"ទេ អរគុណ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> ចង់​ភ្ជាប់​ដោយស្វ័យប្រវត្តិ"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"បណ្ដាញ​ទាំងនេះ​ទទួលបាន​លេខសម្គាល់​ពិសេស ដែល​អាចប្រើ​ដើម្បី​តាមដាន​ទីតាំង​ឧបករណ៍"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"មិនអីទេ ភ្ជាប់ចុះ"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"ភ្ជាប់ Wi-Fi របស់ <xliff:g id="CARRIERNAME">%s</xliff:g> ឬ?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"បណ្ដាញ​ទាំងនេះ​ទទួលបាន​លេខសម្គាល់ស៊ីម ដែល​អាចប្រើ​ដើម្បី​តាមដាន​ទីតាំង​ឧបករណ៍"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"ភ្ជាប់"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"កុំ​ភ្ជាប់"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"បញ្ជាក់​ការតភ្ជាប់​ដែរទេ​?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"ប្រសិនបើ​អ្នក​ភ្ជាប់ នោះបណ្ដាញ Wi-Fi របស់ <xliff:g id="CARRIERNAME">%s</xliff:g> អាច​ចូលប្រើ ឬ​ចែករំលែក​លេខសម្គាល់​ពិសេស​ដែលភ្ជាប់​ជាមួយ​ស៊ីម​របស់អ្នក​។ សកម្មភាពនេះ​អាច​អនុញ្ញាតឱ្យមាន​ការតាមដាន​ទីតាំង​ឧបករណ៍​របស់អ្នក​។"</string>
diff --git a/service/res/values-kn/strings.xml b/service/res/values-kn/strings.xml
index 0e72fee4f..a31341719 100644
--- a/service/res/values-kn/strings.xml
+++ b/service/res/values-kn/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> ಸೂಚಿಸಿರುವ ನೆಟ್‌ವರ್ಕ್‌ಗಳು. ಸಾಧನಗಳು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಗೊಳ್ಳಬಹುದು."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"ಅನುಮತಿಸಿ"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"ಬೇಡ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g>, ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕನೆಕ್ಟ್ ಮಾಡಲು ಬಯಸುತ್ತದೆ"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"ಸಾಧನದ ಸ್ಥಳವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬಳಸಬಹುದಾದ ಅನನ್ಯ ಐಡಿಯನ್ನು ಈ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ಸ್ವೀಕರಿಸುತ್ತವೆ"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"ಹೇಗಿದ್ದರೂ ಕನೆಕ್ಟ್ ಮಾಡಿ"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> ವೈ-ಫೈ ಗೆ ಕನೆಕ್ಟ್ ಮಾಡುವುದೇ?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"ಸಾಧನದ ಸ್ಥಳವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬಳಸಬಹುದಾದ SIM ಐಡಿಯನ್ನು ಈ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ಸ್ವೀಕರಿಸುತ್ತವೆ"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"ಕನೆಕ್ಟ್ ಮಾಡಿ"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"ಕನೆಕ್ಟ್ ಮಾಡಬೇಡಿ"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"ಕನೆಕ್ಷನ್ ಅನ್ನು ಖಚಿತಪಡಿಸಬೇಕೇ?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"ನೀವು ಕನೆಕ್ಟ್ ಮಾಡಿದರೆ, <xliff:g id="CARRIERNAME">%s</xliff:g> ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ನಿಮ್ಮ SIM ಗೆ ಸಂಬಂಧಿಸಿದ ಅನನ್ಯ ಐಡಿಗೆ ಪ್ರವೇಶ ಪಡೆಯಬಹುದು ಅಥವಾ ಅದನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು. ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಇದು ಅವಕಾಶ ನೀಡಬಹುದು."</string>
diff --git a/service/res/values-ko/strings.xml b/service/res/values-ko/strings.xml
index 28f7350a2..4fbca69bc 100644
--- a/service/res/values-ko/strings.xml
+++ b/service/res/values-ko/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g>에서 네트워크를 제안했습니다. 기기가 자동으로 연결될 수 있습니다."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"허용"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"허용 안함"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g>에서 자동 연결을 사용하려고 합니다"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"이 네트워크는 기기 위치를 추적하는 데 사용할 수 있는 고유 ID를 수신합니다."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"무시하고 연결하기"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi에 연결하시겠습니까?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"이 네트워크는 기기 위치 추적에 사용할 수 있는 SIM ID를 수신합니다."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"연결"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"연결 안 함"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"연결하시겠습니까?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"연결하면 <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi 네트워크에서 SIM과 연결된 고유 ID에 액세스하거나 고유 ID를 공유할 수 있습니다. 이 경우 내 기기의 위치를 추적할 수도 있습니다."</string>
diff --git a/service/res/values-ky/strings.xml b/service/res/values-ky/strings.xml
index 873d475e5..4f3aaba94 100644
--- a/service/res/values-ky/strings.xml
+++ b/service/res/values-ky/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> сунуштаган тармактар. Түзмөк автоматтык түрдө туташышы мүмкүн."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Уруксат берүү"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Жок, рахмат"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> байланыш оператору автоматтык түрдө туташкысы келип жатат"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Бул тармактарга өзгөчө идентификатор берилип, анын жардамы менен түзмөктүн жайгашкан жерин аныктоого болот"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Баары бир туташуу"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi тармагына туташтырылсынбы?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Бул тармактарга SIM-картанын идентификатору берилип, анын жардамы менен түзмөктүн жайгашкан жерин аныктоого болот"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Туташуу"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Туташпасын"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Туташууну ырастайсызбы?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Туташсаңыз, <xliff:g id="CARRIERNAME">%s</xliff:g> операторунун Wi‑Fi тармактары SIM картаңызга байланышкан өзгөчө идентификаторго мүмкүнчүлүк алып, аны башкалар менен бөлүшө алат. Ушуну менен, түзмөгүңүздүн жайгашкан жерин аныктай аласыз."</string>
diff --git a/service/res/values-lo/strings.xml b/service/res/values-lo/strings.xml
index 8b6adf798..dbe5efb41 100644
--- a/service/res/values-lo/strings.xml
+++ b/service/res/values-lo/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"ເຄືອຂ່າຍ <xliff:g id="NAME">%s</xliff:g> ທີ່ແນະນຳ. ອຸປະກອນອາດເຊື່ອມຕໍ່ເອງໂດຍອັດຕະໂນມັດ."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"ອະນຸຍາດ"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"ບໍ່, ຂອບໃຈ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> ຕ້ອງການເຊື່ອມຕໍ່ອັດຕະໂນມັດ"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"ເຄືອຂ່າຍເຫຼົ່ານີ້ຈະໄດ້ຮັບ unique ID ທີ່ສາມາດໃຊ້ເພື່ອຕິດຕາມສະຖານທີ່ຂອງອຸປະກອນໄດ້"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"ຢືນຢັນການເຊື່ອມຕໍ່"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"ເຊື່ອມຕໍ່ກັບ Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> ບໍ?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"ເຄືອຂ່າຍເຫຼົ່ານີ້ຈະໄດ້ຮັບ ID ຊິມທີ່ສາມາດໃຊ້ເພື່ອຕິດຕາມສະຖານທີ່ຂອງອຸປະກອນໄດ້"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"ເຊື່ອມຕໍ່"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"ຢ່າເຊື່ອມຕໍ່"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"ຢືນຢັນການເຊື່ອມຕໍ່ບໍ?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"ຫາກທ່ານເຊື່ອມຕໍ່, ເຄືອຂ່າຍ Wi-Fi ຂອງ <xliff:g id="CARRIERNAME">%s</xliff:g> ຈະສາມາດເຂົ້າເຖິງ ແລະ ແບ່ງປັນ unique ID ທີ່ເຊື່ອມໂຍງກັບຊິມຂອງທ່ານໄດ້. ນີ້ອາດເຮັດໃຫ້ສາມາດຕິດຕາມສະຖານທີ່ຂອງອຸປະກອນທ່ານໄດ້."</string>
diff --git a/service/res/values-lt/strings.xml b/service/res/values-lt/strings.xml
index f9617a4c1..3d6a667f2 100644
--- a/service/res/values-lt/strings.xml
+++ b/service/res/values-lt/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"„<xliff:g id="NAME">%s</xliff:g>“ siūlomi tinklai. Įrenginys gali prisijungti automatiškai."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Leisti"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ne, ačiū"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"„<xliff:g id="CARRIERNAME">%s</xliff:g>“ nori prijungti automatiškai"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Šie tinklai gauna unikalų ID, kurį galima naudoti įrenginio vietovei stebėti"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Vis tiek prisijungti"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Prisijungti prie „<xliff:g id="CARRIERNAME">%s</xliff:g>“ „Wi-Fi“?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Šie tinklai gauna SIM kortelės ID, kurį galima naudoti įrenginio vietovei stebėti"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Prisijungti"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Nesprisijungti"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Patvirtinti prijungimą?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Prisijungus „<xliff:g id="CARRIERNAME">%s</xliff:g>“ teikiami „Wi‑Fi“ tinklai gali pasiekti ar bendrinti su jūsų SIM susietą unikalų ID. Gali būti, kad jūsų įrenginio vieta bus stebima."</string>
diff --git a/service/res/values-lv/strings.xml b/service/res/values-lv/strings.xml
index 6c00359bf..c8d186589 100644
--- a/service/res/values-lv/strings.xml
+++ b/service/res/values-lv/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Lietotnes <xliff:g id="NAME">%s</xliff:g> ieteiktie tīkli. Ierīcē var tikt automātiski izveidots savienojums."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Atļaut"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nē, paldies"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> vēlas automātiski izveidot savienojumu"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Šie tīkli saņem unikālo ID, ko var izmantot, lai izsekotu ierīces atrašanās vietu"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Tik un tā izveidot savienojumu"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Vai izveidot savienojumu ar <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Šie tīkli saņem SIM ID, ko var izmantot, lai izsekotu ierīces atrašanās vietu."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Izveidot savienojumu"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Neizveidot savienojumu"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Vai apstiprināt savienojumu?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ja izveidosiet savienojumu, <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi tīkli varēs piekļūt unikālajam ID, kas saistīts ar jūsu SIM, vai kopīgot to. Tādējādi varēs tikt izsekota jūsu ierīces atrašanās vieta."</string>
diff --git a/service/res/values-mcc310-mnc004-b+sr+Latn/strings.xml b/service/res/values-mcc310-mnc004-b+sr+Latn/strings.xml
index 4f7ce68d7..5ab12b1f7 100644
--- a/service/res/values-mcc310-mnc004-b+sr+Latn/strings.xml
+++ b/service/res/values-mcc310-mnc004-b+sr+Latn/strings.xml
@@ -16,11 +16,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_eap_error_message_code_32760" msgid="2026634652595949365">"<xliff:g id="SSID">%1$s</xliff:g> : Ne možete da se povežete na Verizon Wi-Fi Access van oblasti koju Verizon pokriva."</string>
- <string name="wifi_eap_error_message_code_32761" msgid="360877194229909012">"<xliff:g id="SSID">%1$s</xliff:g> : Niste pretplaćeni na Verizon Wi-Fi Access. Pozovite nas na 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32762" msgid="7728639390217187188">"<xliff:g id="SSID">%1$s</xliff:g> : Došlo je do problema u vezi sa Verizon Wi-Fi Access nalogom. Pozovite nas na 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32763" msgid="4245525855163845749">"<xliff:g id="SSID">%1$s</xliff:g> : Već ste povezani na Verizon Wi-Fi Access."</string>
- <string name="wifi_eap_error_message_code_32764" msgid="7837099889588693332">"<xliff:g id="SSID">%1$s</xliff:g> : Postoji problem pri povezivanju na Verizon Wi-Fi Access. Pozovite nas na 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32765" msgid="1430902733213412544">"<xliff:g id="SSID">%1$s</xliff:g> : Došlo je do problema u vezi sa Verizon Wi-Fi Access nalogom. Pozovite nas na 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32766" msgid="3201380662092880364">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon Wi-Fi Access nije dostupan sa vaše lokacije. Probajte ponovo kasnije ili probajte sa neke druge lokacije."</string>
+ <string name="wifi_eap_error_message_code_32760" msgid="2026634652595949365">"<xliff:g id="SSID">%1$s</xliff:g> : Ne možete da se povežete na Verizon WiFi Access van oblasti koju Verizon pokriva."</string>
+ <string name="wifi_eap_error_message_code_32761" msgid="360877194229909012">"<xliff:g id="SSID">%1$s</xliff:g> : Niste pretplaćeni na Verizon WiFi Access. Pozovite nas na 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32762" msgid="7728639390217187188">"<xliff:g id="SSID">%1$s</xliff:g> : Došlo je do problema u vezi sa Verizon WiFi Access nalogom. Pozovite nas na 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32763" msgid="4245525855163845749">"<xliff:g id="SSID">%1$s</xliff:g> : Već ste povezani na Verizon WiFi Access."</string>
+ <string name="wifi_eap_error_message_code_32764" msgid="7837099889588693332">"<xliff:g id="SSID">%1$s</xliff:g> : Postoji problem pri povezivanju na Verizon WiFi Access. Pozovite nas na 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32765" msgid="1430902733213412544">"<xliff:g id="SSID">%1$s</xliff:g> : Došlo je do problema u vezi sa Verizon WiFi Access nalogom. Pozovite nas na 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32766" msgid="3201380662092880364">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon WiFi Access nije dostupan sa vaše lokacije. Probajte ponovo kasnije ili probajte sa neke druge lokacije."</string>
</resources>
diff --git a/service/res/values-mcc310-mnc004-en-rXC/strings.xml b/service/res/values-mcc310-mnc004-en-rXC/strings.xml
deleted file mode 100644
index cf47a174e..000000000
--- a/service/res/values-mcc310-mnc004-en-rXC/strings.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2020 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_eap_error_message_code_32760" msgid="2026634652595949365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : You can’t connect to Verizon Wi-Fi Access from outside the Verizon coverage area.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32761" msgid="360877194229909012">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : You are not subscribed to Verizon Wi-Fi Access. Please call us at 800-922-0204.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32762" msgid="7728639390217187188">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : There is a problem with your Verizon Wi-Fi Access account. Please call us at 800-922-0204.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32763" msgid="4245525855163845749">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : You are already connected to Verizon Wi-Fi Access.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32764" msgid="7837099889588693332">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : There is a problem connecting you to Verizon Wi-Fi Access. Please call us at 800-922-0204.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32765" msgid="1430902733213412544">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : There is a problem with your Verizon Wi-Fi Access account. Please call us at 800-922-0204.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32766" msgid="3201380662092880364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : Verizon Wi-Fi Access is not available from your location. Try again later or try from a different location.‎‏‎‎‏‎"</string>
-</resources>
diff --git a/service/res/values-mcc310-mnc004-sr/strings.xml b/service/res/values-mcc310-mnc004-sr/strings.xml
index 7acf5bf48..176e51bb0 100644
--- a/service/res/values-mcc310-mnc004-sr/strings.xml
+++ b/service/res/values-mcc310-mnc004-sr/strings.xml
@@ -16,11 +16,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_eap_error_message_code_32760" msgid="2026634652595949365">"<xliff:g id="SSID">%1$s</xliff:g> : Не можете да се повежете на Verizon Wi-Fi Access ван области коју Verizon покрива."</string>
- <string name="wifi_eap_error_message_code_32761" msgid="360877194229909012">"<xliff:g id="SSID">%1$s</xliff:g> : Нисте претплаћени на Verizon Wi-Fi Access. Позовите нас на 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32762" msgid="7728639390217187188">"<xliff:g id="SSID">%1$s</xliff:g> : Дошло је до проблема у вези са Verizon Wi-Fi Access налогом. Позовите нас на 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32763" msgid="4245525855163845749">"<xliff:g id="SSID">%1$s</xliff:g> : Већ сте повезани на Verizon Wi-Fi Access."</string>
- <string name="wifi_eap_error_message_code_32764" msgid="7837099889588693332">"<xliff:g id="SSID">%1$s</xliff:g> : Постоји проблем при повезивању на Verizon Wi-Fi Access. Позовите нас на 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32765" msgid="1430902733213412544">"<xliff:g id="SSID">%1$s</xliff:g> : Дошло је до проблема у вези са Verizon Wi-Fi Access налогом. Позовите нас на 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32766" msgid="3201380662092880364">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon Wi-Fi Access није доступан са ваше локације. Пробајте поново касније или пробајте са неке друге локације."</string>
+ <string name="wifi_eap_error_message_code_32760" msgid="2026634652595949365">"<xliff:g id="SSID">%1$s</xliff:g> : Не можете да се повежете на Verizon WiFi Access ван области коју Verizon покрива."</string>
+ <string name="wifi_eap_error_message_code_32761" msgid="360877194229909012">"<xliff:g id="SSID">%1$s</xliff:g> : Нисте претплаћени на Verizon WiFi Access. Позовите нас на 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32762" msgid="7728639390217187188">"<xliff:g id="SSID">%1$s</xliff:g> : Дошло је до проблема у вези са Verizon WiFi Access налогом. Позовите нас на 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32763" msgid="4245525855163845749">"<xliff:g id="SSID">%1$s</xliff:g> : Већ сте повезани на Verizon WiFi Access."</string>
+ <string name="wifi_eap_error_message_code_32764" msgid="7837099889588693332">"<xliff:g id="SSID">%1$s</xliff:g> : Постоји проблем при повезивању на Verizon WiFi Access. Позовите нас на 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32765" msgid="1430902733213412544">"<xliff:g id="SSID">%1$s</xliff:g> : Дошло је до проблема у вези са Verizon WiFi Access налогом. Позовите нас на 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32766" msgid="3201380662092880364">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon WiFi Access није доступан са ваше локације. Пробајте поново касније или пробајте са неке друге локације."</string>
</resources>
diff --git a/service/res/values-mcc310-mnc004-ta/strings.xml b/service/res/values-mcc310-mnc004-ta/strings.xml
index 516a52727..9dacf26ee 100644
--- a/service/res/values-mcc310-mnc004-ta/strings.xml
+++ b/service/res/values-mcc310-mnc004-ta/strings.xml
@@ -16,11 +16,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_eap_error_message_code_32760" msgid="2026634652595949365">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon கவரேஜ் பகுதியைத் தாண்டி Verizon Wi-Fi Accessஸுடன் இணைக்க முடியாது."</string>
- <string name="wifi_eap_error_message_code_32761" msgid="360877194229909012">"<xliff:g id="SSID">%1$s</xliff:g> : நீங்கள் Verizon Wi-Fi Accessஸிற்கு சந்தா செய்யவில்லை. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
- <string name="wifi_eap_error_message_code_32762" msgid="7728639390217187188">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் Verizon Wi-Fi Access கணக்கில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
- <string name="wifi_eap_error_message_code_32763" msgid="4245525855163845749">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon Wi-Fi Accessஸுடன் ஏற்கெனவே இணைப்பில் உள்ளீர்கள்."</string>
- <string name="wifi_eap_error_message_code_32764" msgid="7837099889588693332">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon Wi-Fi Accessஸுடன் இணைப்பதில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
- <string name="wifi_eap_error_message_code_32765" msgid="1430902733213412544">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் Verizon Wi-Fi Access கணக்கில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
- <string name="wifi_eap_error_message_code_32766" msgid="3201380662092880364">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் பகுதிக்கு Verizon Wi-Fi Access சேவை கிடைக்கவில்லை. மீண்டும் முயலவும் அல்லது வேறு இருப்பிடத்தில் இருந்து முயலவும்."</string>
+ <string name="wifi_eap_error_message_code_32760" msgid="2026634652595949365">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon கவரேஜ் பகுதியைத் தாண்டி Verizon வைஃபை Accessஸுடன் இணைக்க முடியாது."</string>
+ <string name="wifi_eap_error_message_code_32761" msgid="360877194229909012">"<xliff:g id="SSID">%1$s</xliff:g> : நீங்கள் Verizon வைஃபை Accessஸிற்கு சந்தா செய்யவில்லை. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
+ <string name="wifi_eap_error_message_code_32762" msgid="7728639390217187188">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் Verizon வைஃபை Access கணக்கில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
+ <string name="wifi_eap_error_message_code_32763" msgid="4245525855163845749">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon வைஃபை Accessஸுடன் ஏற்கெனவே இணைப்பில் உள்ளீர்கள்."</string>
+ <string name="wifi_eap_error_message_code_32764" msgid="7837099889588693332">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon வைஃபை Accessஸுடன் இணைப்பதில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
+ <string name="wifi_eap_error_message_code_32765" msgid="1430902733213412544">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் Verizon வைஃபை Access கணக்கில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
+ <string name="wifi_eap_error_message_code_32766" msgid="3201380662092880364">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் பகுதிக்கு Verizon வைஃபை Access சேவை கிடைக்கவில்லை. மீண்டும் முயலவும் அல்லது வேறு இருப்பிடத்தில் இருந்து முயலவும்."</string>
</resources>
diff --git a/service/res/values-mcc311-mnc480-b+sr+Latn/strings.xml b/service/res/values-mcc311-mnc480-b+sr+Latn/strings.xml
index df22976c1..712334ed5 100644
--- a/service/res/values-mcc311-mnc480-b+sr+Latn/strings.xml
+++ b/service/res/values-mcc311-mnc480-b+sr+Latn/strings.xml
@@ -16,11 +16,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_eap_error_message_code_32760" msgid="4555573944292156870">"<xliff:g id="SSID">%1$s</xliff:g> : Ne možete da se povežete na Verizon Wi-Fi Access van oblasti koju Verizon pokriva."</string>
- <string name="wifi_eap_error_message_code_32761" msgid="6990683739673245807">"<xliff:g id="SSID">%1$s</xliff:g> : Niste pretplaćeni na Verizon Wi-Fi Access. Pozovite nas na 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32762" msgid="6557033506833966794">"<xliff:g id="SSID">%1$s</xliff:g> : Došlo je do problema u vezi sa Verizon Wi-Fi Access nalogom. Pozovite nas na 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32763" msgid="3400795159444109915">"<xliff:g id="SSID">%1$s</xliff:g> : Već ste povezani na Verizon Wi-Fi Access."</string>
- <string name="wifi_eap_error_message_code_32764" msgid="1312072776680938826">"<xliff:g id="SSID">%1$s</xliff:g> : Postoji problem pri povezivanju na Verizon Wi-Fi Access. Pozovite nas na 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32765" msgid="8150337243297471644">"<xliff:g id="SSID">%1$s</xliff:g> : Došlo je do problema u vezi sa Verizon Wi-Fi Access nalogom. Pozovite nas na 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32766" msgid="962325801073733226">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon Wi-Fi Access nije dostupan sa vaše lokacije. Probajte ponovo kasnije ili probajte sa neke druge lokacije."</string>
+ <string name="wifi_eap_error_message_code_32760" msgid="4555573944292156870">"<xliff:g id="SSID">%1$s</xliff:g> : Ne možete da se povežete na Verizon WiFi Access van oblasti koju Verizon pokriva."</string>
+ <string name="wifi_eap_error_message_code_32761" msgid="6990683739673245807">"<xliff:g id="SSID">%1$s</xliff:g> : Niste pretplaćeni na Verizon WiFi Access. Pozovite nas na 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32762" msgid="6557033506833966794">"<xliff:g id="SSID">%1$s</xliff:g> : Došlo je do problema u vezi sa Verizon WiFi Access nalogom. Pozovite nas na 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32763" msgid="3400795159444109915">"<xliff:g id="SSID">%1$s</xliff:g> : Već ste povezani na Verizon WiFi Access."</string>
+ <string name="wifi_eap_error_message_code_32764" msgid="1312072776680938826">"<xliff:g id="SSID">%1$s</xliff:g> : Postoji problem pri povezivanju na Verizon WiFi Access. Pozovite nas na 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32765" msgid="8150337243297471644">"<xliff:g id="SSID">%1$s</xliff:g> : Došlo je do problema u vezi sa Verizon WiFi Access nalogom. Pozovite nas na 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32766" msgid="962325801073733226">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon WiFi Access nije dostupan sa vaše lokacije. Probajte ponovo kasnije ili probajte sa neke druge lokacije."</string>
</resources>
diff --git a/service/res/values-mcc311-mnc480-en-rXC/strings.xml b/service/res/values-mcc311-mnc480-en-rXC/strings.xml
deleted file mode 100644
index 78f49226c..000000000
--- a/service/res/values-mcc311-mnc480-en-rXC/strings.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2020 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_eap_error_message_code_32760" msgid="4555573944292156870">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : You can’t connect to Verizon Wi-Fi Access from outside the Verizon coverage area.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32761" msgid="6990683739673245807">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : You are not subscribed to Verizon Wi-Fi Access. Please call us at 800-922-0204.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32762" msgid="6557033506833966794">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : There is a problem with your Verizon Wi-Fi Access account. Please call us at 800-922-0204.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32763" msgid="3400795159444109915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : You are already connected to Verizon Wi-Fi Access.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32764" msgid="1312072776680938826">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : There is a problem connecting you to Verizon Wi-Fi Access. Please call us at 800-922-0204.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32765" msgid="8150337243297471644">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : There is a problem with your Verizon Wi-Fi Access account. Please call us at 800-922-0204.‎‏‎‎‏‎"</string>
- <string name="wifi_eap_error_message_code_32766" msgid="962325801073733226">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ : Verizon Wi-Fi Access is not available from your location. Try again later or try from a different location.‎‏‎‎‏‎"</string>
-</resources>
diff --git a/service/res/values-mcc311-mnc480-sr/strings.xml b/service/res/values-mcc311-mnc480-sr/strings.xml
index 49c8d474d..05b637a8a 100644
--- a/service/res/values-mcc311-mnc480-sr/strings.xml
+++ b/service/res/values-mcc311-mnc480-sr/strings.xml
@@ -16,11 +16,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_eap_error_message_code_32760" msgid="4555573944292156870">"<xliff:g id="SSID">%1$s</xliff:g> : Не можете да се повежете на Verizon Wi-Fi Access ван области коју Verizon покрива."</string>
- <string name="wifi_eap_error_message_code_32761" msgid="6990683739673245807">"<xliff:g id="SSID">%1$s</xliff:g> : Нисте претплаћени на Verizon Wi-Fi Access. Позовите нас на 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32762" msgid="6557033506833966794">"<xliff:g id="SSID">%1$s</xliff:g> : Дошло је до проблема у вези са Verizon Wi-Fi Access налогом. Позовите нас на 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32763" msgid="3400795159444109915">"<xliff:g id="SSID">%1$s</xliff:g> : Већ сте повезани на Verizon Wi-Fi Access."</string>
- <string name="wifi_eap_error_message_code_32764" msgid="1312072776680938826">"<xliff:g id="SSID">%1$s</xliff:g> : Постоји проблем при повезивању на Verizon Wi-Fi Access. Позовите нас на 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32765" msgid="8150337243297471644">"<xliff:g id="SSID">%1$s</xliff:g> : Дошло је до проблема у вези са Verizon Wi-Fi Access налогом. Позовите нас на 800 922 0204."</string>
- <string name="wifi_eap_error_message_code_32766" msgid="962325801073733226">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon Wi-Fi Access није доступан са ваше локације. Пробајте поново касније или пробајте са неке друге локације."</string>
+ <string name="wifi_eap_error_message_code_32760" msgid="4555573944292156870">"<xliff:g id="SSID">%1$s</xliff:g> : Не можете да се повежете на Verizon WiFi Access ван области коју Verizon покрива."</string>
+ <string name="wifi_eap_error_message_code_32761" msgid="6990683739673245807">"<xliff:g id="SSID">%1$s</xliff:g> : Нисте претплаћени на Verizon WiFi Access. Позовите нас на 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32762" msgid="6557033506833966794">"<xliff:g id="SSID">%1$s</xliff:g> : Дошло је до проблема у вези са Verizon WiFi Access налогом. Позовите нас на 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32763" msgid="3400795159444109915">"<xliff:g id="SSID">%1$s</xliff:g> : Већ сте повезани на Verizon WiFi Access."</string>
+ <string name="wifi_eap_error_message_code_32764" msgid="1312072776680938826">"<xliff:g id="SSID">%1$s</xliff:g> : Постоји проблем при повезивању на Verizon WiFi Access. Позовите нас на 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32765" msgid="8150337243297471644">"<xliff:g id="SSID">%1$s</xliff:g> : Дошло је до проблема у вези са Verizon WiFi Access налогом. Позовите нас на 800 922 0204."</string>
+ <string name="wifi_eap_error_message_code_32766" msgid="962325801073733226">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon WiFi Access није доступан са ваше локације. Пробајте поново касније или пробајте са неке друге локације."</string>
</resources>
diff --git a/service/res/values-mcc311-mnc480-ta/strings.xml b/service/res/values-mcc311-mnc480-ta/strings.xml
index 379eeacb7..79239efdd 100644
--- a/service/res/values-mcc311-mnc480-ta/strings.xml
+++ b/service/res/values-mcc311-mnc480-ta/strings.xml
@@ -16,11 +16,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_eap_error_message_code_32760" msgid="4555573944292156870">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon கவரேஜ் பகுதியைத் தாண்டி Verizon Wi-Fi Accessஸுடன் இணைக்க முடியாது."</string>
- <string name="wifi_eap_error_message_code_32761" msgid="6990683739673245807">"<xliff:g id="SSID">%1$s</xliff:g> : நீங்கள் Verizon Wi-Fi Accessஸிற்கு சந்தா செய்யவில்லை. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
- <string name="wifi_eap_error_message_code_32762" msgid="6557033506833966794">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் Verizon Wi-Fi Access கணக்கில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
- <string name="wifi_eap_error_message_code_32763" msgid="3400795159444109915">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon Wi-Fi Accessஸுடன் ஏற்கெனவே இணைப்பில் உள்ளீர்கள்."</string>
- <string name="wifi_eap_error_message_code_32764" msgid="1312072776680938826">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon Wi-Fi Accessஸுடன் இணைப்பதில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
- <string name="wifi_eap_error_message_code_32765" msgid="8150337243297471644">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் Verizon Wi-Fi Access கணக்கில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
- <string name="wifi_eap_error_message_code_32766" msgid="962325801073733226">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் பகுதிக்கு Verizon Wi-Fi Access சேவை கிடைக்கவில்லை. மீண்டும் முயலவும் அல்லது வேறு இருப்பிடத்தில் இருந்து முயலவும்."</string>
+ <string name="wifi_eap_error_message_code_32760" msgid="4555573944292156870">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon கவரேஜ் பகுதியைத் தாண்டி Verizon வைஃபை Accessஸுடன் இணைக்க முடியாது."</string>
+ <string name="wifi_eap_error_message_code_32761" msgid="6990683739673245807">"<xliff:g id="SSID">%1$s</xliff:g> : நீங்கள் Verizon வைஃபை Accessஸிற்கு சந்தா செய்யவில்லை. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
+ <string name="wifi_eap_error_message_code_32762" msgid="6557033506833966794">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் Verizon வைஃபை Access கணக்கில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
+ <string name="wifi_eap_error_message_code_32763" msgid="3400795159444109915">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon வைஃபை Accessஸுடன் ஏற்கெனவே இணைப்பில் உள்ளீர்கள்."</string>
+ <string name="wifi_eap_error_message_code_32764" msgid="1312072776680938826">"<xliff:g id="SSID">%1$s</xliff:g> : Verizon வைஃபை Accessஸுடன் இணைப்பதில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
+ <string name="wifi_eap_error_message_code_32765" msgid="8150337243297471644">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் Verizon வைஃபை Access கணக்கில் சிக்கல் உள்ளது. 800-922-0204 என்ற எண்ணில் எங்களைத் தொடர்புகொள்ளவும்."</string>
+ <string name="wifi_eap_error_message_code_32766" msgid="962325801073733226">"<xliff:g id="SSID">%1$s</xliff:g> : உங்கள் பகுதிக்கு Verizon வைஃபை Access சேவை கிடைக்கவில்லை. மீண்டும் முயலவும் அல்லது வேறு இருப்பிடத்தில் இருந்து முயலவும்."</string>
</resources>
diff --git a/service/res/values-mk/strings.xml b/service/res/values-mk/strings.xml
index 1852f52ee..836a82303 100644
--- a/service/res/values-mk/strings.xml
+++ b/service/res/values-mk/strings.xml
@@ -20,7 +20,7 @@
<string name="wifi_available_title" msgid="2844963247498642107">"Поврзете се на отворена Wi‑Fi-мрежа"</string>
<string name="wifi_available_title_connecting" msgid="4308431577637294026">"Поврзување со Wi-Fi мрежа"</string>
<string name="wifi_available_title_connected" msgid="922603556292157664">"Се поврзавте на Wi‑Fi-мрежа"</string>
- <string name="wifi_available_title_failed_to_connect" msgid="2304443371893419545">"Не можеше да се поврзе на Wi‑Fi-мрежа"</string>
+ <string name="wifi_available_title_failed_to_connect" msgid="2304443371893419545">"Не може да се поврзе на Wi‑Fi-мрежа"</string>
<string name="wifi_available_content_failed_to_connect" msgid="3171283790496729136">"Допрете за да ги видите сите мрежи"</string>
<string name="wifi_available_action_connect" msgid="7989951293406720158">"Поврзете се"</string>
<string name="wifi_available_action_all_networks" msgid="2616926772813472478">"Сите мрежи"</string>
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Предложени мрежи од <xliff:g id="NAME">%s</xliff:g>. Уредот може да се поврзе автоматски."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Дозволи"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Не, фала"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> сака автоматски да се поврзе"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Мреживе примаат уникатен ID што може да се користи за следење на локацијата на уредот"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Сепак поврзи се"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Да се поврзе на Wi-Fi на <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Мреживе примаат уникатен ID на SIM што може да се користи за следење на локацијата на уредот"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Поврзи"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Не поврзувај"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Да се потврди врската?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ако се поврзете, Wi‑Fi мрежите на <xliff:g id="CARRIERNAME">%s</xliff:g> може да имаат пристап до уникатен ID поврзан со вашата SIM-картичка или да го споделуваат. Ова може да овозможи следење на локацијата на вашиот уред."</string>
@@ -44,7 +44,7 @@
<string name="wifi_wakeup_onboarding_action_disable" msgid="672002169958868470">"Не вклучувај повторно"</string>
<string name="wifi_wakeup_enabled_title" msgid="7758584632765597662">"Wi‑Fi се вклучи автоматски"</string>
<string name="wifi_wakeup_enabled_content" msgid="4713038331224656338">"Близу сте до зачувана мрежа: <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string>
- <string name="wifi_watchdog_network_disabled" msgid="688248897654073438">"Не можеше да се поврзе со Wi-Fi"</string>
+ <string name="wifi_watchdog_network_disabled" msgid="688248897654073438">"Не може да се поврзе на Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="2946200607682633112">" има слаба интернет-врска."</string>
<string name="wifi_connect_alert_title" msgid="6144470472092017636">"Дозволете поврзување?"</string>
<string name="wifi_connect_alert_message" msgid="3123801378559831220">"Апликацијата %1$s сака да се поврзе со Wifi-мрежата %2$s"</string>
diff --git a/service/res/values-ml/strings.xml b/service/res/values-ml/strings.xml
index 2e927f1da..648d76044 100644
--- a/service/res/values-ml/strings.xml
+++ b/service/res/values-ml/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> നിർദ്ദേശിച്ച നെറ്റ്‌വർക്കുകൾ. ഉപകരണം സ്വയമേവ കണക്‌റ്റ് ചെയ്‌തേക്കാം."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"അനുവദിക്കുക"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"വേണ്ട"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> സ്വയമേവ കണക്റ്റ് ചെയ്യാൻ താൽപ്പര്യപ്പെടുന്നു"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"ഉപകരണ ലൊക്കേഷൻ ട്രാക്ക് ചെയ്യാൻ ഉപയോഗിക്കാവുന്ന തനത് ഐഡി ഈ നെറ്റ്‌വർക്കുകൾക്ക് ലഭിക്കും"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"എന്തായാലും കണക്‌റ്റ് ചെയ്യുക"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> വൈഫൈയിൽ കണക്റ്റ് ചെയ്യണോ?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"ഉപകരണ ലൊക്കേഷൻ ട്രാക്ക് ചെയ്യാൻ ഉപയോഗിക്കാവുന്ന സിം ഐഡി ഈ നെറ്റ്‌വർക്കുകൾക്ക് ലഭിക്കും"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"കണക്‌റ്റ് ചെയ്യുക"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"കണക്റ്റ് ചെയ്യരുത്"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"കണക്ഷൻ സ്ഥിരീകരിക്കണോ?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"നിങ്ങൾ കണക്റ്റ് ചെയ്യുകയാണെങ്കിൽ, സിമ്മുമായി ബന്ധപ്പെട്ട തനത് ഐഡി <xliff:g id="CARRIERNAME">%s</xliff:g> വൈഫൈ നെറ്റ്‌വർക്കുകൾ ആക്സസ് ചെയ്യുകയോ പങ്കിടുകയോ ചെയ്തേക്കാം. നിങ്ങളുടെ ഉപകരണ ലൊക്കേഷൻ ട്രാക്ക് ചെയ്യാൻ ഇത് അനുവദിച്ചേക്കാം."</string>
diff --git a/service/res/values-mn/strings.xml b/service/res/values-mn/strings.xml
index 9cacf8813..691c9d154 100644
--- a/service/res/values-mn/strings.xml
+++ b/service/res/values-mn/strings.xml
@@ -31,12 +31,12 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> сүлжээ санал болголоо. Төхөөрөмж автоматаар холбогдож магадгүй."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Зөвшөөрөх"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Үгүй, баярлалаа"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> нь автоматаар холбогдох хүсэлтэй байна"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Эдгээр сүлжээ нь төхөөрөмжийн байршлыг тандахад ашиглах боломжтой цор ганц дугаарыг хүлээн авдаг"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Ямар ч тохиолдолд холбогдох"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g>-н Wi‑Fi-д холбоогдох уу?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Эдгээр сүлжээ нь төхөөрөмжийн байршлыг тандахад ашиглах боломжтой SIM ID-г хүлээн авдаг"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Холбогдох"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Битгий холбогд"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Холболтыг баталгаажуулах уу?"</string>
- <string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Хэрэв та холбогдвол <xliff:g id="CARRIERNAME">%s</xliff:g>-н Wi‑Fi сүлжээ нь таны СИМ-тэй холбоотой цор ганц дугаарт хандаж эсвэл түүнийг хуваалцаж болзошгүй. Энэ нь таны төхөөрөмжийн байршлыг тандахыг зөвшөөрч болзошгүй."</string>
+ <string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Хэрэв та холбогдвол <xliff:g id="CARRIERNAME">%s</xliff:g>-н Wi‑Fi сүлжээ нь таны SIM-тэй холбоотой цор ганц дугаарт хандаж эсвэл түүнийг хуваалцаж болзошгүй. Энэ нь таны төхөөрөмжийн байршлыг тандахыг зөвшөөрч болзошгүй."</string>
<string name="wifi_suggestion_action_allow_imsi_privacy_exemption_confirmation" msgid="3102046304611708608">"Холбогдох"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_confirmation" msgid="8467281276632253246">"Битгий холбогд"</string>
<string name="wifi_wakeup_onboarding_title" msgid="8825510461478671504">"Wi‑Fi автоматаар асна"</string>
@@ -80,5 +80,5 @@
<string name="wifi_softap_auto_shutdown_timeout_expired_title" msgid="3145323037688670043">"Сүлжээний цэгийг унтраасан"</string>
<string name="wifi_softap_auto_shutdown_timeout_expired_summary" msgid="5136282560556465701">"Ямар ч төхөөрөмж холбогдоогүй байна. Өөрчлөхийн тулд товшино уу."</string>
<string name="wifi_sim_required_title" msgid="8362843050699015640">"Wifi-г салгалаа"</string>
- <string name="wifi_sim_required_message" msgid="6085636103482409595">"<xliff:g id="SSID">%1$s</xliff:g>-д холбогдохын тулд <xliff:g id="CARRIER_NAME">%2$s</xliff:g> СИМ-г хийнэ үү"</string>
+ <string name="wifi_sim_required_message" msgid="6085636103482409595">"<xliff:g id="SSID">%1$s</xliff:g>-д холбогдохын тулд <xliff:g id="CARRIER_NAME">%2$s</xliff:g> SIM-г хийнэ үү"</string>
</resources>
diff --git a/service/res/values-mr/strings.xml b/service/res/values-mr/strings.xml
index e34c664a3..361222732 100644
--- a/service/res/values-mr/strings.xml
+++ b/service/res/values-mr/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> सुचवलेली नेटवर्क. डिव्हाइस आपोआप कनेक्ट होऊ शकते."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"अनुमती द्या"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"नाही, नको"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> ला ऑटो‑कनेक्ट करायचे आहे"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"या नेटवर्कना एक युनिक आयडी मिळतो जो डिव्हाइस स्थानाचा मागोवा घेण्यासाठी वापरला जाऊ शकतो"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"तरीही कनेक्ट करा"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> वाय-फायशी कनेक्ट करायचे आहे का?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"या नेटवर्कना एक सिम आयडी मिळतो जो डिव्हाइस स्थानाचा माग ठेवण्यासाठी वापरला जाऊ शकतो"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"कनेक्ट करा"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"कनेक्ट करू नका"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"कनेक्शन निश्चित करायचे आहे का?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"तुम्ही कनेक्ट केल्यास, <xliff:g id="CARRIERNAME">%s</xliff:g> वाय-फाय नेटवर्क तुमच्या सिम शी संबंधित एक युनिक आयडी अ‍ॅक्सेस किंवा शेअर करू शकतात. यामुळे तुमच्या डिव्हाइस स्थानाचा मागोवा घेतला जाऊ शकतो."</string>
diff --git a/service/res/values-ms/strings.xml b/service/res/values-ms/strings.xml
index 76f7b4f5e..0ecdb4fb1 100644
--- a/service/res/values-ms/strings.xml
+++ b/service/res/values-ms/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Rangkaian yang dicadangkan oleh <xliff:g id="NAME">%s</xliff:g>. Peranti mungkin disambungkan secara automatik."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Benarkan"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Tidak perlu"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> mahu membuat autosambungan"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Rangkaian ini memerlukan ID unit yang boleh digunakan untuk menjejaki lokasi peranti."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Sambungkan juga"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Sambung ke Wi‑Fi <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Rangkaian ini menerima ID SIM yang boleh digunakan untuk menjejaki lokasi peranti"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Sambung"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Jangan sambung"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Sahkan sambungan?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Jika anda bersambung, rangkaian Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> mungkin mengakses atau berkongsi ID unik yang dikaitkan dengan SIM anda. Hal ini mungkin membenarkan lokasi peranti anda dijejaki."</string>
diff --git a/service/res/values-my/strings.xml b/service/res/values-my/strings.xml
index f46860cb1..d88c369d4 100644
--- a/service/res/values-my/strings.xml
+++ b/service/res/values-my/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> သည် ကွန်ရက်များကို အကြံပြုထားသည်။ စက်သည် အလိုအလျောက် ချိတ်ဆက်နိုင်သည်။"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"ခွင့်ပြုရန်"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"မလိုပါ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> က အလိုအလျောက် ချိတ်ဆက်လိုသည်"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"ဤကွန်ရက်များက စက်တည်နေရာကို ခြေရာခံရန် အသုံးပြုနိုင်သည့် သီးသန့် ID ကို ရရှိပါသည်"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"မည်သို့ပင်ဖြစ်စေ ချိတ်ဆက်ရန်"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi သို့ ချိတ်ဆက်မလား။"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"ဤကွန်ရက်များက စက်တည်နေရာကို ခြေရာခံရန် အသုံးပြုနိုင်သည့် SIM ID တစ်ခုကို ရရှိပါသည်"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"ချိတ်ဆက်ပါ"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"မချိတ်ဆက်ပါနှင့်"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"ချိတ်ဆက်မှု အတည်ပြုမလား။"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"သင်ချိတ်ဆက်ပါက <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi ကွန်ရက်များက သင့်ဆင်းမ်ကတ်နှင့် ဆက်စပ်နေသည့် သီးသန့် ID ကို သုံးခြင်း သို့မဟုတ် မျှဝေခြင်းတို့ ပြုလုပ်နိုင်သည်။ ၎င်းက သင့်စက်၏တည်နေရာကို ခြေရာခံခွင့် ပြုနိုင်သည်။"</string>
diff --git a/service/res/values-nb/strings.xml b/service/res/values-nb/strings.xml
index ea826c162..898d50a9d 100644
--- a/service/res/values-nb/strings.xml
+++ b/service/res/values-nb/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g>-foreslåtte nettverk. Enheten kan koble til automatisk."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Tillat"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nei takk"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> vil koble til automatisk"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Disse nettverkene mottar en unik ID som kan brukes til å spore enhetsposisjonen"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Koble til likevel"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Vil du koble til <xliff:g id="CARRIERNAME">%s</xliff:g>-Wi-Fi?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Disse nettverkene mottar en SIM-ID som kan brukes til å spore enhetsposisjonen"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Koble til"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ikke koble til"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Vil du bekrefte tilkoblingen?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Hvis du kobler til, kan <xliff:g id="CARRIERNAME">%s</xliff:g>-Wi‑Fi-nettverk få tilgang til eller dele en unik ID som er knyttet til SIM-kortet ditt. Dette gjør at enhetens posisjon kan spores."</string>
diff --git a/service/res/values-ne/strings.xml b/service/res/values-ne/strings.xml
index 9315db303..9b2aec5be 100644
--- a/service/res/values-ne/strings.xml
+++ b/service/res/values-ne/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> ले सिफारिस गरेका नेटवर्कहरू। यन्त्र स्वतः जडान हुन सक्छ।"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"अनुमति दिनुहोस्"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"पर्दैन, धन्यवाद"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> स्वतः जोडिन चाहन्छ"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"यी नेटवर्कहरूले यन्त्रको स्थान पहिल्याउन प्रयोग गर्न सकिने एउटा अद्वित्तीय ID प्राप्त गर्छन्"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"जे भए पनि पनि जोड्नुहोस्"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi मा कनेक्ट गर्ने हो?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"यी नेटवर्कहरूलाई यन्त्रको स्थान पहिल्याउन प्रयोग गर्न मिल्ने एउटा अद्वितीय SIM कार्ड ID उपलब्ध गराइन्छ"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"कनेक्ट गर्नुहोस्"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"नजोड्नुहोस्"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"जोडिने हो?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"तपाईं जोडिनुभयो भने <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi नेटवर्कहरूले तपाईंको SIM सँग सम्बद्ध अद्वित्तीय ID प्रयोग गर्न वा उक्त ID आदान प्रदान गर्न सक्छ। उक्त ID प्रयोग गरी तपाईंको यन्त्रको स्थान पहिल्याउन सकिन्छ।"</string>
diff --git a/service/res/values-nl/strings.xml b/service/res/values-nl/strings.xml
index 8c7943337..1baa7ff8a 100644
--- a/service/res/values-nl/strings.xml
+++ b/service/res/values-nl/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> heeft netwerken voorgesteld. Apparaat kan automatisch verbinding maken."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Toestaan"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nee, bedankt"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> wil automatisch verbinding maken"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Deze netwerken ontvangen een unieke ID die kan worden gebruikt om de apparaatlocatie bij te houden"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Toch verbinding maken"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Verbinding maken met wifi van <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Deze netwerken ontvangen een simkaart-ID die kan worden gebruikt om de apparaatlocatie bij te houden"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Verbinding maken"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Geen verbinding maken"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Verbinding bevestigen?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Als je verbinding maakt, hebben de wifi-netwerken van <xliff:g id="CARRIERNAME">%s</xliff:g> mogelijk toegang tot de unieke ID die aan je simkaart is gekoppeld of kunnen ze deze delen. Op deze manier kan de locatie van je apparaat worden bijgehouden."</string>
diff --git a/service/res/values-or/strings.xml b/service/res/values-or/strings.xml
index 4212759c9..c1150ae70 100644
--- a/service/res/values-or/strings.xml
+++ b/service/res/values-or/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> ପ୍ରସ୍ତାବିତ ନେଟ୍‌ୱାର୍କଗୁଡ଼ିକ। ଡିଭାଇସ୍ ହୁଏତ ସ୍ୱଚାଳିତ ଭାବେ ସଂଯୋଗ ହୋଇପାରେ।"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"ନାହିଁ, ଥାଉ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> ସ୍ୱତଃ-ସଂଯୋଗ କରିବାକୁ ଚାହେଁ"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"ଏହି ନେଟୱାର୍କଗୁଡ଼ିକ ଏକ ସ୍ଵତନ୍ତ୍ର ID ପାଇଥାଏ ଯାହାକୁ ଡିଭାଇସର ଲୋକେସନ୍ ଟ୍ରାକ୍ କରିବାକୁ ବ୍ୟବହାର କରାଯାଇପାରେ"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"ଯେ କୌଣସି ମତେ ସଂଯୋଗ କରନ୍ତୁ"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> ୱାଇ-ଫାଇ ସହ ସଂଯୋଗ କରିବେ?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"ଏହି ନେଟୱାର୍କଗୁଡ଼ିକ ଏକ SIM ID ପ୍ରାପ୍ତ କରେ ଯାହା ଡିଭାଇସର ଲୋକେସନ୍ ଟ୍ରାକ୍ କରିବାରେ ବ୍ୟବହାର କରାଯାଇପାରିବ"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"ସଂଯୋଗ କରନ୍ତୁ"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"ସଂଯୋଗ କରନ୍ତୁ ନାହିଁ"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"ସଂଯୋଗ ସୁନିଶ୍ଚିତ କରିବେ?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"ଯଦି ଆପଣ ସଂଯୋଗ କରିବେ, ତେବେ <xliff:g id="CARRIERNAME">%s</xliff:g> ୱାଇ-ଫାଇ ନେଟୱାର୍କଗୁଡ଼ିକ ଆପଣଙ୍କ SIM ସମ୍ବନ୍ଧିତ ଏକ ସ୍ଵତନ୍ତ୍ର ID ଆକ୍ସେସ୍ କିମ୍ବା ସେୟାର୍ କରିପାରେ। ଏହା ଆପଣଙ୍କ ଡିଭାଇସର ଲୋକେସନ୍ ଟ୍ରାକ୍ କରିବାକୁ ଅନୁମତି ଦେଇପାରେ।"</string>
diff --git a/service/res/values-pa/strings.xml b/service/res/values-pa/strings.xml
index ee68453b4..e4e7c77e5 100644
--- a/service/res/values-pa/strings.xml
+++ b/service/res/values-pa/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> ਦੇ ਸੁਝਾਏ ਨੈੱਟਵਰਕ। ਸ਼ਾਇਦ ਡੀਵਾਈਸ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਕਨੈਕਟ ਹੋਵੇ।"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"ਵਰਤਣ ਦਿਓ"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"ਨਹੀਂ ਧੰਨਵਾਦ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> ਸਵੈ-ਕਨੈਕਟ ਕਰਨਾ ਚਾਹੁੰਦਾ ਹੈ"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"ਇਹ ਨੈੱਟਵਰਕ ਇੱਕ ਵਿਲੱਖਣ ਆਈਡੀ ਪ੍ਰਾਪਤ ਕਰਦੇ ਹਨ ਜੋ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"ਫਿਰ ਵੀ ਕਨੈਕਟ ਕਰੋ"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"ਕੀ <xliff:g id="CARRIERNAME">%s</xliff:g> ਵਾਈ-ਫਾਈ ਨਾਲ ਕਨੈਕਟ ਕਰਨਾ ਹੈ?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"ਇਹ ਨੈੱਟਵਰਕ ਇੱਕ ਸਿਮ ਆਈਡੀ ਪ੍ਰਾਪਤ ਕਰਦੇ ਹਨ ਜਿਨ੍ਹਾਂ ਨੂੰ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"ਕਨੈਕਟ ਕਰੋ"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"ਕਨੈਕਟ ਨਾ ਕਰੋ"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"ਕੀ ਕਨੈਕਸ਼ਨ ਦੀ ਤਸਦੀਕ ਕਰਨੀ ਹੈ?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"ਜੇ ਤੁਸੀਂ ਕਨੈਕਟ ਕਰਦੇ ਹੋ, ਤਾਂ <xliff:g id="CARRIERNAME">%s</xliff:g> ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਤੁਹਾਡੇ ਸਿਮ ਨਾਲ ਸੰਬੰਧਿਤ ਵਿਲੱਖਣ ਆਈਡੀ ਤੱਕ ਪਹੁੰਚ ਜਾਂ ਉਸ ਨੂੰ ਸਾਂਝਾ ਕਰ ਸਕਦੇ ਹਨ। ਇਸ ਨਾਲ ਸ਼ਾਇਦ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਟਿਕਾਣਾ ਟਰੈਕ ਕੀਤਾ ਜਾ ਸਕੇ।"</string>
diff --git a/service/res/values-pl/strings.xml b/service/res/values-pl/strings.xml
index 89628eec9..468495de2 100644
--- a/service/res/values-pl/strings.xml
+++ b/service/res/values-pl/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Sugerowane sieci: <xliff:g id="NAME">%s</xliff:g>. Urządzenie może łączyć się automatycznie."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Zezwól"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nie, dziękuję"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> chce łączyć się automatycznie"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Te sieci otrzymują unikalny identyfikator, który można wykorzystać do śledzenia lokalizacji urządzenia"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Połącz mimo to"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Połączyć z Wi-Fi operatora <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Te sieci otrzymują identyfikator SIM, który można wykorzystać do śledzenia lokalizacji urządzenia"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Połącz"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Nie łącz"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Potwierdzić połączenie?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Jeśli się połączysz, sieci Wi-Fi operatora <xliff:g id="CARRIERNAME">%s</xliff:g> będą mogły korzystać z unikalnego identyfikatora powiązanego z Twoją kartą SIM oraz go udostępniać. To może pozwolić na monitorowanie lokalizacji Twojego urządzenia."</string>
diff --git a/service/res/values-pt-rBR/strings.xml b/service/res/values-pt-rBR/strings.xml
index 15b5e3963..c5cef5636 100644
--- a/service/res/values-pt-rBR/strings.xml
+++ b/service/res/values-pt-rBR/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Redes sugeridas pelo app <xliff:g id="NAME">%s</xliff:g>. O dispositivo pode se conectar automaticamente."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Permitir"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Não"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> quer fazer a conexão automática"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Essas redes recebem um código exclusivo que pode ser usado para monitorar o local do dispositivo"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Conectar assim mesmo"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Conectar à rede Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Essas redes recebem um ID de chip que pode ser usado para monitorar o local do dispositivo"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Conectar"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Não conectar"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confirmar a conexão?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Se você fizer a conexão, as redes Wi-Fi da <xliff:g id="CARRIERNAME">%s</xliff:g> poderão acessar ou compartilhar o código exclusivo associado ao seu chip. Isso talvez permita que o local do dispositivo seja monitorado."</string>
diff --git a/service/res/values-pt-rPT/strings.xml b/service/res/values-pt-rPT/strings.xml
index 72d466138..e051c21ed 100644
--- a/service/res/values-pt-rPT/strings.xml
+++ b/service/res/values-pt-rPT/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Redes sugeridas por <xliff:g id="NAME">%s</xliff:g>. O dispositivo pode estabelecer ligação automaticamente."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Permitir"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Não, obrigado"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"O operador <xliff:g id="CARRIERNAME">%s</xliff:g> pretende efetuar uma ligação automática"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Estas redes recebem um ID exclusivo que pode ser utilizado para monitorizar a localização dos dispositivos."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Ligar mesmo assim"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Pretende estabelecer ligação à rede Wi-Fi do operador <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Estas redes recebem um ID do SIM que pode ser utilizado para monitorizar a localização dos dispositivos."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Ligar"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Não ligar"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Pretende confirmar a ligação?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Caso proceda à ligação, as redes Wi-Fi do operador <xliff:g id="CARRIERNAME">%s</xliff:g> podem partilhar ou aceder a um ID exclusivo associado ao seu SIM. Esta ação pode permitir que a localização do seu dispositivo seja monitorizada."</string>
diff --git a/service/res/values-pt/strings.xml b/service/res/values-pt/strings.xml
index 15b5e3963..c5cef5636 100644
--- a/service/res/values-pt/strings.xml
+++ b/service/res/values-pt/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Redes sugeridas pelo app <xliff:g id="NAME">%s</xliff:g>. O dispositivo pode se conectar automaticamente."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Permitir"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Não"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> quer fazer a conexão automática"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Essas redes recebem um código exclusivo que pode ser usado para monitorar o local do dispositivo"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Conectar assim mesmo"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Conectar à rede Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Essas redes recebem um ID de chip que pode ser usado para monitorar o local do dispositivo"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Conectar"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Não conectar"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confirmar a conexão?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Se você fizer a conexão, as redes Wi-Fi da <xliff:g id="CARRIERNAME">%s</xliff:g> poderão acessar ou compartilhar o código exclusivo associado ao seu chip. Isso talvez permita que o local do dispositivo seja monitorado."</string>
diff --git a/service/res/values-ro/strings.xml b/service/res/values-ro/strings.xml
index 52b425233..b6ee6bee4 100644
--- a/service/res/values-ro/strings.xml
+++ b/service/res/values-ro/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> a sugerat rețele. Dispozitivul se poate conecta automat."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Permiteți"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nu, mulțumesc"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> încearcă să se conecteze automat"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Aceste rețele primesc un ID unic care se poate folosi pentru a urmări locația dispozitivului"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Conectați oricum"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Vă conectați la rețeaua Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Aceste rețele primesc un cod SIM care se poate folosi pentru a urmări locația dispozitivului"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Conectați"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Nu conectați"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Confirmați conexiunea?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Dacă vă conectați, rețelele Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> pot să acceseze sau să trimită un ID unic asociat profilului dvs. SIM. Astfel, locația dispozitivului poate fi urmărită."</string>
diff --git a/service/res/values-ru/strings.xml b/service/res/values-ru/strings.xml
index c5f252103..266ee0dfa 100644
--- a/service/res/values-ru/strings.xml
+++ b/service/res/values-ru/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Приложение \"<xliff:g id="NAME">%s</xliff:g>\" рекомендует сети, к которым устройство может подключаться автоматически."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Разрешить"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Нет, спасибо"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> запрашивает разрешение на автоподключение"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Эти сети получат доступ к уникальному идентификатору, с помощью которого можно отслеживать местоположение устройства."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Все равно подключиться"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Подключиться к сети Wi-Fi оператора \"<xliff:g id="CARRIERNAME">%s</xliff:g>\"?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Этим сетям будет передан идентификатор SIM-карты, с помощью которого можно отслеживать местоположение устройства."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Подключиться"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Не подключаться"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Подтвердите подключение"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Если вы установите подключение, Wi‑Fi-сети оператора \"<xliff:g id="CARRIERNAME">%s</xliff:g>\" смогут получать доступ к уникальному идентификатору, связанному с вашей SIM-картой, или делиться им. Это позволит отслеживать местоположение устройства."</string>
diff --git a/service/res/values-si/strings.xml b/service/res/values-si/strings.xml
index 8e6b17fcf..959f31c59 100644
--- a/service/res/values-si/strings.xml
+++ b/service/res/values-si/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> යෝජිත ජාල. උපාංගය ස්වයංක්‍රියව සම්බන්ධ වනු ඇත."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"ඉඩ දෙන්න"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"එපා, ස්තූතියි"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> හට ස්වයං නිවැරදි කිරීමට අවශ්‍යයි"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"උපාංග ස්ථානය නිරීක්ෂණය කිරීමට භාවිත කළ හැකි අනන්‍ය ID එකක් මෙම ජාලවලට ලැබේ"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"කෙසේ වෙතත් සම්බන්ධ කරන්න"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi වෙත සබඳින්නද?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"උපාංග ස්ථානය නිරීක්ෂණය කිරීමට භාවිත කළ හැකි SIM ID එකක් මෙම ජාලවලට ලැබේ"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"සම්බන්ධ කරන්න"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"සම්බන්ධ නොකරන්න"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"නිවැරදි කිරීම තහවුරු කරන්නද?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"ඔබ සම්බන්ධ වුවහොත්, <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi ජාල ඔබේ SIM එක හා සම්බන්ධිත අනන්‍ය ID එකකට ප්‍රවේශ වීමට හෝ එය බෙදා ගැනීමට හැකිය. මෙය ඔබේ උපාංගයෙහි ස්ථානය නිරීක්ෂණය කිරීමට ඉඩ දිය හැකිය."</string>
diff --git a/service/res/values-sk/strings.xml b/service/res/values-sk/strings.xml
index fe5827778..db3478bf1 100644
--- a/service/res/values-sk/strings.xml
+++ b/service/res/values-sk/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Siete navrhuje aplikácia <xliff:g id="NAME">%s</xliff:g>. Zariadenie sa môže pripájať automaticky."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Povoliť"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nie, ďakujem"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"Operátor <xliff:g id="CARRIERNAME">%s</xliff:g> chce používať automatické pripojenie"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Tieto siete prijímajú jedinečný identifikátor, ktorý môže byť použitý na sledovanie polohy zariadenia"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Pripojiť aj tak"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Chcete sa pripojiť k sieti Wi‑Fi operátora <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Tieto siete dostávajú jedinečný identifikátor SIM karty, pomocou ktorého je možné sledovať polohu zariadenia"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Pripojiť"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Nepripojiť"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Chcete potvrdiť pripojenie?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Po pripojení môžu siete Wi‑Fi operátora <xliff:g id="CARRIERNAME">%s</xliff:g> pristupovať k jedinečnému identifikátoru spojenému s vašou SIM kartou alebo ho zdieľať. To umožňuje sledovať polohu vášho zariadenia."</string>
diff --git a/service/res/values-sl/strings.xml b/service/res/values-sl/strings.xml
index c27f98541..990cddd22 100644
--- a/service/res/values-sl/strings.xml
+++ b/service/res/values-sl/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> – predlagana omrežja. Naprava se lahko poveže samodejno."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Dovoli"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ne, hvala"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"Operater <xliff:g id="CARRIERNAME">%s</xliff:g> se želi samodejno povezati"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Ta omrežja prejmejo enolični ID, s katerim je mogoče spremljati lokacijo naprave."</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Vseeno poveži"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Želite vzpostaviti povezavo z omrežjem Wi-Fi operaterja <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Ta omrežja prejmejo ID kartice SIM, s katerim je mogoče spremljati lokacijo naprave."</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Poveži"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ne poveži"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Želite potrditi povezavo?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Če vzpostavite povezavo, lahko omrežja Wi-Fi operaterja <xliff:g id="CARRIERNAME">%s</xliff:g> dostopajo do enoličnega ID-ja, povezanega s kartico SIM, in ga delijo. To lahko omogoči spremljanje lokacije naprave."</string>
diff --git a/service/res/values-sq/strings.xml b/service/res/values-sq/strings.xml
index 708503d86..1bee4985f 100644
--- a/service/res/values-sq/strings.xml
+++ b/service/res/values-sq/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Rrjet e sugjeruara të <xliff:g id="NAME">%s</xliff:g>. Pajisja mund të lidhet automatikisht."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Lejo"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Jo, faleminderit"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> dëshiron të lidhet automatikisht"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Këto rrjete marrin një ID unike që mund të përdoret për të monitoruar vendndodhjen"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Lidhu gjithsesi"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Do të lidhesh me Wi-Fi nga <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Këto rrjete marrin një ID karte SIM që mund të përdoret për të monitoruar vendndodhjen"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Lidh"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Mos u lidh"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Të konfirmohet lidhja?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Nëse lidhesh, rrjetet Wi-Fi të <xliff:g id="CARRIERNAME">%s</xliff:g> mund të kenë qasje ose mund të ndajnë një ID unike që lidhet me kartën tënde SIM. Kjo mund të lejojë monitorimin e vendndodhjes sate."</string>
diff --git a/service/res/values-sr/strings.xml b/service/res/values-sr/strings.xml
index c488c21b0..74bf98238 100644
--- a/service/res/values-sr/strings.xml
+++ b/service/res/values-sr/strings.xml
@@ -16,9 +16,9 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifiResourcesAppLabel" product="default" msgid="4965162975090543792">"Системски Wi-Fi ресурси"</string>
+ <string name="wifiResourcesAppLabel" product="default" msgid="4965162975090543792">"Системски WiFi ресурси"</string>
<string name="wifi_available_title" msgid="2844963247498642107">"Повежите се са отвореном Wi‑Fi мрежом"</string>
- <string name="wifi_available_title_connecting" msgid="4308431577637294026">"Повезује се са Wi-Fi мрежом..."</string>
+ <string name="wifi_available_title_connecting" msgid="4308431577637294026">"Повезује се са WiFi мрежом..."</string>
<string name="wifi_available_title_connected" msgid="922603556292157664">"Повезали сте се са Wi‑Fi мрежом"</string>
<string name="wifi_available_title_failed_to_connect" msgid="2304443371893419545">"Повезивање са Wi‑Fi мрежом није успело"</string>
<string name="wifi_available_content_failed_to_connect" msgid="3171283790496729136">"Додирните да бисте видели све мреже"</string>
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Мреже које предлаже <xliff:g id="NAME">%s</xliff:g>. Уређај ће се можда повезати аутоматски."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Дозволи"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Не, хвала"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> жели да се аутоматски повеже"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Ове мреже захтевају јединствени ИД који може да се користи за праћење локације уређаја"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Ипак повежи"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Желите да се повежете на WiFi мрежу <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Ове мреже добијају ИД SIM картице који може да се користи за праћење локације уређаја"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Повежи"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Не повезуј"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Желите ли да потврдите повезивање?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ако се повежете, Wi‑Fi мреже оператера <xliff:g id="CARRIERNAME">%s</xliff:g> могу да приступају јединственом ИД-у повезаном са SIM картицом или да га деле. То може да омогући праћење локације уређаја."</string>
@@ -44,10 +44,10 @@
<string name="wifi_wakeup_onboarding_action_disable" msgid="672002169958868470">"Не укључуј поново"</string>
<string name="wifi_wakeup_enabled_title" msgid="7758584632765597662">"Wi‑Fi је аутоматски укључен"</string>
<string name="wifi_wakeup_enabled_content" msgid="4713038331224656338">"У близини сте сачуване мреже: <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string>
- <string name="wifi_watchdog_network_disabled" msgid="688248897654073438">"Није могуће повезати са Wi-Fi мрежом"</string>
+ <string name="wifi_watchdog_network_disabled" msgid="688248897654073438">"Није могуће повезати са WiFi мрежом"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="2946200607682633112">" има лошу интернет везу."</string>
<string name="wifi_connect_alert_title" msgid="6144470472092017636">"Желите ли да дозволите повезивање?"</string>
- <string name="wifi_connect_alert_message" msgid="3123801378559831220">"Апликација %1$s жели да се повеже на Wi-Fi мрежу %2$s"</string>
+ <string name="wifi_connect_alert_message" msgid="3123801378559831220">"Апликација %1$s жели да се повеже на WiFi мрежу %2$s"</string>
<string name="wifi_connect_default_application" msgid="6164721692891325243">"Апликација"</string>
<string name="accept" msgid="5931271886782610829">"Прихвати"</string>
<string name="decline" msgid="6874256900873707640">"Одбиј"</string>
@@ -58,9 +58,9 @@
<string name="wifi_p2p_to_message" msgid="6664932426704362946">"Коме:"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5661843905965463456">"Унесите потребни PIN:"</string>
<string name="wifi_p2p_show_pin_message" msgid="4332876077723766909">"PIN:"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="3372859876274663802">"Таблет ће привремено прекинути везу са Wi-Fi-јем док је повезан са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="406603193215934517">"Android TV уређај ће привремено прекинути везу са Wi-Fi мрежом док је повезан са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
- <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="2723785832319900478">"Телефон ће привремено прекинути везу са Wi-Fi-јем док је повезан са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="3372859876274663802">"Таблет ће привремено прекинути везу са WiFi-ем док је повезан са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="406603193215934517">"Android TV уређај ће привремено прекинути везу са WiFi мрежом док је повезан са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="2723785832319900478">"Телефон ће привремено прекинути везу са WiFi-ем док је повезан са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="dlg_ok" msgid="3250085870426030310">"Потврди"</string>
<string name="wifi_cannot_connect_with_randomized_mac_title" msgid="3161171832972320854">"Повезивање на мрежу <xliff:g id="SSID">%1$s</xliff:g> није успело"</string>
<string name="wifi_cannot_connect_with_randomized_mac_message" msgid="3084495849409387375">"Додирните да бисте променили подешавања приватности и пробали поново"</string>
@@ -79,6 +79,6 @@
<string name="wifi_eap_error_message_code_32766" msgid="6907401733158262194">"<xliff:g id="SSID">%1$s</xliff:g>: EAP грешка при потврди идентитета 32766"</string>
<string name="wifi_softap_auto_shutdown_timeout_expired_title" msgid="3145323037688670043">"Хотспот је искључен"</string>
<string name="wifi_softap_auto_shutdown_timeout_expired_summary" msgid="5136282560556465701">"Ниједан уређај није повезан. Додирните да бисте изменили."</string>
- <string name="wifi_sim_required_title" msgid="8362843050699015640">"Wi-Fi веза је прекинута"</string>
- <string name="wifi_sim_required_message" msgid="6085636103482409595">"Да бисте се повезали на мрежу <xliff:g id="SSID">%1$s</xliff:g>, уметните <xliff:g id="CARRIER_NAME">%2$s</xliff:g> SIM картицу"</string>
+ <string name="wifi_sim_required_title" msgid="8362843050699015640">"WiFi веза је прекинута"</string>
+ <string name="wifi_sim_required_message" msgid="6085636103482409595">"Да бисте се повезали на мрежу <xliff:g id="SSID">%1$s</xliff:g>, ставите <xliff:g id="CARRIER_NAME">%2$s</xliff:g> SIM картицу"</string>
</resources>
diff --git a/service/res/values-sv/strings.xml b/service/res/values-sv/strings.xml
index 6b97f4adb..01fe1a832 100644
--- a/service/res/values-sv/strings.xml
+++ b/service/res/values-sv/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Nätverk som föreslagits av <xliff:g id="NAME">%s</xliff:g>. Enheten kan anslutas automatiskt."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Tillåt"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Nej tack"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> vill ansluta automatiskt"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Dessa nätverk får ett unikt id som kan användas till att spåra enhetens plats"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Anslut ändå"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Vill du ansluta till Wi-Fi från <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Dessa nätverk får ett SIM-id som kan användas till att spåra enhetens plats"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Anslut"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Anslut inte"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Vill du bekräfta anslutningen?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Om du ansluter kan Wi-Fi-nätverk från <xliff:g id="CARRIERNAME">%s</xliff:g> få åtkomst till eller dela ett unikt id som är kopplat till ditt SIM-kort. Detta kan göra det möjligt att spåra enhetens plats."</string>
diff --git a/service/res/values-sw/strings.xml b/service/res/values-sw/strings.xml
index 12bc190df..5ab27d395 100644
--- a/service/res/values-sw/strings.xml
+++ b/service/res/values-sw/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Mitandao inayopendekezwa kwa ajili ya <xliff:g id="NAME">%s</xliff:g>. Huenda kifaa kikaunganisha kiotomatiki."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Ruhusu"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Hapana"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> inataka kuunganisha kiotomatiki"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Mitandao hii hupokea kitambulisho cha kipekee kinachoweza kutumika ili kufuatilia mahali kifaa kilipo"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Unganisha hata hivyo"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Ungependa kuunganisha kwenye Wi‑Fi ya <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Mitandao hii hupokea kitambulisho cha SIM kinachoweza kutumika ili kufuatilia mahali kifaa kilipo"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Unganisha"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Usiunganishe"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Ungependa kuthibitisha muunganisho?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Ukiunganisha, huenda mitandao ya Wi-Fi ya <xliff:g id="CARRIERNAME">%s</xliff:g> ikafikia au kushiriki kitambulisho cha kipekee kinachohusishwa na SIM yako. Huenda hii ikaruhusu ufuatiliaji wa mahali kifaa chako kilipo."</string>
diff --git a/service/res/values-ta/strings.xml b/service/res/values-ta/strings.xml
index fd4af15e8..0fe47fea7 100644
--- a/service/res/values-ta/strings.xml
+++ b/service/res/values-ta/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> பரிந்துரைக்கும் நெட்வொர்க்குகள். சாதனம் தானாக இணைக்கப்படக்கூடும்."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"அனுமதி"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"வேண்டாம்"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> தானாக இணைக்க விரும்புகிறது"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"சாதன இருப்பிடத்தை டிராக் செய்யப் பயன்படுத்தப்படும் தனிப்பட்ட ஐடியை இந்த நெட்வொர்க்குகள் பெறும்"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"பரவாயில்லை, இணை"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> வைஃபையுடன் இணைக்கவா?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"சாதன இருப்பிடத்தைக் கண்காணிக்கப் பயன்படுத்தப்படும் சிம் ஐடியை இந்த நெட்வொர்க்குகள் பெறும்"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"இணை"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"இணைக்காதே"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"நிச்சயமாக இணைக்கவா?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"இணைத்தால், உங்கள் SIMமுடன் இணைக்கப்பட்டிருக்கும் தனிப்பட்ட ஐடியை <xliff:g id="CARRIERNAME">%s</xliff:g> வைஃபை நெட்வொர்க்குகள் அணுகக்கூடும் அல்லது பகிரக்கூடும். இதனால் உங்கள் சாதனத்தின் இருப்பிடத்தை டிராக் செய்ய அனுமதிக்கப்படலாம்."</string>
diff --git a/service/res/values-te/strings.xml b/service/res/values-te/strings.xml
index 465f58750..fedd99034 100644
--- a/service/res/values-te/strings.xml
+++ b/service/res/values-te/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> సూచించిన నెట్‌వర్క్‌లు. పరికరం ఆటోమేటిక్‌గా కనెక్ట్ అవచ్చు."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"అనుమతించు"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"వద్దు"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> ఆటోమేటిక్‌గా కనెక్షన్ అనుమతిని కోరుతోంది"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"ఈ నెట్‌వర్క్‌లకు, పరికర లొకేషన్‌ను ట్రాక్ చేయడానికి ఉపయోగించగల ప్రత్యేక ID అందుతాయి"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"ఏదేమైనా కనెక్ట్ చేయి"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fiకి కనెక్ట్ చేయాలా?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"పరికర లొకేషన్‌ను ట్రాక్ చేయడానికి ఉపయోగపడే SIM IDని ఈ నెట్‌వర్క్‌లు అందుకుంటాయి"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"కనెక్ట్ చేయి"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"కనెక్ట్ చేయవద్దు"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"ఖచ్చితంగా కనెక్ట్ చేయాలా?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"<xliff:g id="CARRIERNAME">%s</xliff:g> నెట్‌వర్క్‌కు మీరు కనెక్ట్ చేస్తే, ఆ క్యారియర్ Wi‑Fi నెట్‌వర్క్‌లు మీ SIMకు అనుబంధితమైన ప్రత్యేక IDని యాక్సెస్ లేదా షేర్ చేయగలగవచ్చు. దీని వలన మీ పరికరం లొకేషన్ ట్రాక్ చేయబడవచ్చు."</string>
diff --git a/service/res/values-th/strings.xml b/service/res/values-th/strings.xml
index 5cd4e6e92..b6a0691aa 100644
--- a/service/res/values-th/strings.xml
+++ b/service/res/values-th/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"เครือข่ายที่แนะนำโดย <xliff:g id="NAME">%s</xliff:g> และอุปกรณ์อาจเชื่อมต่อโดยอัตโนมัติ"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"อนุญาต"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"ไม่เป็นไร"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> ต้องการเชื่อมต่อโดยอัตโนมัติ"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"เครือข่ายเหล่านี้จะได้รับรหัสที่ไม่ซ้ำกันซึ่งใช้ในการติดตามตำแหน่งของอุปกรณ์ได้"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"ยังต้องการเชื่อมต่อ"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"เชื่อมต่อกับ Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> ไหม"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"เครือข่ายเหล่านี้จะได้รับรหัส SIM ซึ่งใช้ติดตามตำแหน่งอุปกรณ์ได้"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"เชื่อมต่อ"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"ไม่เชื่อมต่อ"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"ยืนยันการเชื่อมต่อใช่ไหม"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"หากเชื่อมต่อ เครือข่าย Wi-Fi ของ <xliff:g id="CARRIERNAME">%s</xliff:g> อาจเข้าถึงหรือแชร์รหัสที่ไม่ซ้ำกันซึ่งเชื่อมโยงกับซิมของคุณ และอาจอนุญาตให้มีการติดตามตำแหน่งอุปกรณ์ของคุณ"</string>
diff --git a/service/res/values-tl/strings.xml b/service/res/values-tl/strings.xml
index bc38fd400..b26679db9 100644
--- a/service/res/values-tl/strings.xml
+++ b/service/res/values-tl/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Mga iminumungkahing network ng <xliff:g id="NAME">%s</xliff:g>. Posibleng awtomatikong kumonekta ang device."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Payagan"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Hindi, salamat na lang"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"Gustong awtomatikong kumonekta ng <xliff:g id="CARRIERNAME">%s</xliff:g>"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Makakatanggap ang mga network na ito ng isang natatanging ID na puwedeng gamitin sa pagsusubaybay ng lokasyon ng device"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Kumonekta pa rin"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Kumonekta sa <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Tumatanggap ang mga network na ito ng SIM ID na magagamit sa pag-track sa lokasyon ng device"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Kumonekta"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Huwag kumonekta"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Kumpirmahin ang koneksyon?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Kung kokonekta ka, posibleng ma-access o maging kapareho ng mga Wi-Fi network ng <xliff:g id="CARRIERNAME">%s</xliff:g> ang natatanging ID na nauugnay sa iyong SIM. Baka mapahintulutan nito ang pagsubaybay sa lokasyon ng iyong device."</string>
diff --git a/service/res/values-tr/strings.xml b/service/res/values-tr/strings.xml
index c5c605dca..16cf1a297 100644
--- a/service/res/values-tr/strings.xml
+++ b/service/res/values-tr/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> tarafından önerilen ağlar. Cihaz otomatik olarak bağlanabilir."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"İzin ver"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Hayır, teşekkürler"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g>, otomatik olarak bağlanmak istiyor"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Bu ağlar, cihazın konumunu izlemek için kullanılabilecek benzersiz bir kimlik alır"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Yine de bağlan"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> kablosuz ağına bağlanılsın mı?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Bu ağlar, cihazın konumunu izlemek için kullanılabilecek bir SIM kimliği alır"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Bağlan"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Bağlanma"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Bağlantı onaylansın mı?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Bağlanırsanız <xliff:g id="CARRIERNAME">%s</xliff:g> kablosuz ağları SIM\'inizle ilişkilendirilmiş benzersiz kimliğe erişebilir veya bunları paylaşabilir. Bu, cihazınızın konumunun izlenmesine olanak sağlayabilir."</string>
diff --git a/service/res/values-uk/strings.xml b/service/res/values-uk/strings.xml
index 6624d0131..e2b9e5129 100644
--- a/service/res/values-uk/strings.xml
+++ b/service/res/values-uk/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Мережі, пропоновані додатком <xliff:g id="NAME">%s</xliff:g>. Пристрій може підключитися автоматично."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Дозволити"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Ні, дякую"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"Оператор \"<xliff:g id="CARRIERNAME">%s</xliff:g>\" хоче підключатися автоматично"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Ці мережі отримують унікальний ідентифікатор, за допомогою якого можна відстежити місцезнаходження пристрою"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Усе одно підключитися"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Підключитися до мережі Wi‑Fi <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Ці мережі отримують ідентифікатор SIM-карти, за допомогою якого можна відстежити місцезнаходження пристрою"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Підключитися"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Не підключатися"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Підтвердити підключення?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Якщо ви під\'єднаєтеся, мережі Wi‑Fi оператора \"<xliff:g id="CARRIERNAME">%s</xliff:g>\" зможуть розкрити унікальний ідентифікатор вашої SIM-карти й відстежити місцезнаходження вашого пристрою."</string>
diff --git a/service/res/values-ur/strings.xml b/service/res/values-ur/strings.xml
index 668abaaf9..0d506439a 100644
--- a/service/res/values-ur/strings.xml
+++ b/service/res/values-ur/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> تجویز کردہ نیٹ ورکس۔ آلہ خودکار طور پر منسلک ہو سکتا ہے۔"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"اجازت ہیں"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"نہیں شکریہ"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> خود کار طور پر منسلک ہونا چاہتا ہے"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"‏یہ نیٹ ورکس ایک منفرد ID موصول کرتے ہیں جسے آلہ کا مقام ٹریک کرنے کے لیے استعمال کیا جا سکتا ہے"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"بہرحال منسلک کریں"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"‏<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi سے منسلک ہوں؟"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"‏یہ نیٹ ورکس ایک منفرد SIM ID موصول کرتے ہیں جسے آلہ کا مقام ٹریک کرنے کے لیے استعمال کیا جا سکتا ہے"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"منسلک کریں"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"منسلک نہ کریں"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"کنکشن کی تصدیق کریں؟"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"‏اگر آب منسلک ہیں، Wi-Fi <xliff:g id="CARRIERNAME">%s</xliff:g> نیٹ ورکس آپ کے SIM سے وابستہ ایک منفرد ID تک رسائی حاصل یا اشتراک کر سکتے ہیں۔ یہ آپ کے آلہ کے مقام کو ٹریک کیے جانے کی اجازت دے سکتا ہے۔"</string>
diff --git a/service/res/values-uz/strings.xml b/service/res/values-uz/strings.xml
index 9ba977816..be52bd25a 100644
--- a/service/res/values-uz/strings.xml
+++ b/service/res/values-uz/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> tavsiya qilgan tarmoqlar. Qurilma avtomatik ulanishi mumkin."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Ruxsat"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Kerak emas"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> avtomatik ulanmoqchi"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Bu tarmoqlar unikal identifikator oladi, bu orqali qurilma joylashuvini kuzatish mumkin"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Baribir ulansin"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"<xliff:g id="CARRIERNAME">%s</xliff:g> Wi-Fi tarmoqqa ulaning"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Bu tarmoqlar SIM identifikator oladi, bu orqali qurilma joylashuvini kuzatish mumkin"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Ulash"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ulanmasin"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Ulanish tasdiqlansinmi?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Agar ulansangiz, <xliff:g id="CARRIERNAME">%s</xliff:g> Wi‑Fi tarmoqlari SIM kartangizga aloqador unikal identifikatordan foydalanishi yoki ulashishi mumkin. Bu qurilmangiz joylashuvi kuzatilishiga ruxsat berishi mumkin."</string>
diff --git a/service/res/values-vi/strings.xml b/service/res/values-vi/strings.xml
index fafdd68ca..d6e1ea354 100644
--- a/service/res/values-vi/strings.xml
+++ b/service/res/values-vi/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"Các mạng do <xliff:g id="NAME">%s</xliff:g> đề xuất. Thiết bị có thể kết nối tự động."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Cho phép"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Không, cảm ơn"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g> muốn kết nối tự động"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Các mạng này nhận được một mã nhận dạng duy nhất dùng để theo dõi vị trí của thiết bị"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Vẫn kết nối"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Kết nối với Wi-Fi của <xliff:g id="CARRIERNAME">%s</xliff:g>?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Các mạng này nhận được một mã nhận dạng SIM có thể dùng để theo dõi vị trí của thiết bị"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Kết nối"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Không kết nối"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Xác nhận kết nối?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Nếu bạn kết nối, các mạng Wi-Fi của <xliff:g id="CARRIERNAME">%s</xliff:g> có thể truy cập hoặc chia sẻ mã nhận dạng duy nhất liên kết với SIM của bạn. Từ đó, các mạng này có thể theo dõi vị trí thiết bị của bạn."</string>
diff --git a/service/res/values-zh-rCN/strings.xml b/service/res/values-zh-rCN/strings.xml
index 1c9aa1e13..bf1eff811 100644
--- a/service/res/values-zh-rCN/strings.xml
+++ b/service/res/values-zh-rCN/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g>建议的网络。设备可能会自动连接到这些网络。"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"允许"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"不用了"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"<xliff:g id="CARRIERNAME">%s</xliff:g>想要自动连接"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"这些网络会收到可用于跟踪设备位置的唯一 ID"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"仍然连接"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"要连接到<xliff:g id="CARRIERNAME">%s</xliff:g>的 WLAN 吗?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"这些网络会收到可用于跟踪设备位置的 SIM 卡 ID"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"连接"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"不连接"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"确认连接?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"如果您确认连接,<xliff:g id="CARRIERNAME">%s</xliff:g> WLAN 网络可获取或共享与您的 SIM 卡关联的唯一 ID。他人或许可以借此跟踪您的设备位置。"</string>
diff --git a/service/res/values-zh-rHK/strings.xml b/service/res/values-zh-rHK/strings.xml
index c66b2b5fc..d41d74e94 100644
--- a/service/res/values-zh-rHK/strings.xml
+++ b/service/res/values-zh-rHK/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"「<xliff:g id="NAME">%s</xliff:g>」已建議網絡連線,裝置可能會自動連接網絡。"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"允許"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"不用了,謝謝"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"「<xliff:g id="CARRIERNAME">%s</xliff:g>」要求自動連線"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"這些網絡會收到可追蹤裝置位置的獨有 ID"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"仍要連線"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"要連線至「<xliff:g id="CARRIERNAME">%s</xliff:g>」Wi-Fi 嗎?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"這些網絡會收到可追蹤裝置位置的 SIM 卡 ID"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"連接"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"不要連線"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"確定要連線嗎?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"連線後,「<xliff:g id="CARRIERNAME">%s</xliff:g>」的 Wi‑Fi 網絡就能存取或分享與 SIM 卡相關的獨有 ID,有心人或許可藉此追蹤您裝置的位置。"</string>
diff --git a/service/res/values-zh-rTW/strings.xml b/service/res/values-zh-rTW/strings.xml
index ede75b4fe..3bc93f13b 100644
--- a/service/res/values-zh-rTW/strings.xml
+++ b/service/res/values-zh-rTW/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"「<xliff:g id="NAME">%s</xliff:g>」建議的網路。裝置可能會自動連線到這些網路。"</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"允許"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"不用了,謝謝"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"「<xliff:g id="CARRIERNAME">%s</xliff:g>」要求自動連線"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"這些網路會收到可用於追蹤裝置位置資訊的唯一 ID"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"繼續連線"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"要連線至「<xliff:g id="CARRIERNAME">%s</xliff:g>」的 Wi-Fi 網路嗎?"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"這些網路會收到可用於追蹤裝置位置的 SIM 卡 ID"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"連線"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"不要連線"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"確定要連線嗎?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"連線後,「<xliff:g id="CARRIERNAME">%s</xliff:g>」的 Wi‑Fi 網路可能會存取或分享與 SIM 卡相關的唯一 ID,有心人士或許可藉此追蹤你的裝置所在位置。"</string>
diff --git a/service/res/values-zu/strings.xml b/service/res/values-zu/strings.xml
index ce14f9217..ecc4a2553 100644
--- a/service/res/values-zu/strings.xml
+++ b/service/res/values-zu/strings.xml
@@ -31,9 +31,9 @@
<string name="wifi_suggestion_content" msgid="7796523101671166285">"<xliff:g id="NAME">%s</xliff:g> amanethiwekhi aphakanyisiwe. Idivayisi ingaxhumeka ngokuzenzakalela."</string>
<string name="wifi_suggestion_action_allow_app" msgid="1269853856167682235">"Vumela"</string>
<string name="wifi_suggestion_action_disallow_app" msgid="4844316521687534924">"Cha ngiyabonga"</string>
- <string name="wifi_suggestion_imsi_privacy_title" msgid="2915915091404141470">"I-<xliff:g id="CARRIERNAME">%s</xliff:g> ifuna ukuxhuma ngokuzenzekelayo"</string>
- <string name="wifi_suggestion_imsi_privacy_content" msgid="2964867545127220548">"Lama nethiwekhi athola i-ID ehlukile engasetshenziselwa ukulandelela indawo yedivayisi"</string>
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="4510014692570591616">"Xhuma noma kunjalo"</string>
+ <string name="wifi_suggestion_imsi_privacy_title" msgid="442867569519352918">"Xhuma ku-Wi-Fi ye-<xliff:g id="CARRIERNAME">%s</xliff:g>"</string>
+ <string name="wifi_suggestion_imsi_privacy_content" msgid="6631744859477949328">"Lama nethiwekhi athola i-SIM ID engasetshenziselwa ukulandelela indawo yedivayisi"</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier" msgid="6445286383390779291">"Xhuma"</string>
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier" msgid="1466870675651864648">"Ungaxhumi"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_title" msgid="3252889810011175876">"Qinisekisa ukuxhuma?"</string>
<string name="wifi_suggestion_imsi_privacy_exemption_confirmation_content" msgid="1665277613133133730">"Uma uxhuma, amanethiwekhi we-Wi-Fi ye-<xliff:g id="CARRIERNAME">%s</xliff:g> angase akwazi ukufinyelela ku-ID yakho ehlukile ehlobene ne-SIM yakho. Lokhu kungase kuvumele ukuthi indawo yedivayisi yakho ilandelelwe."</string>
diff --git a/service/res/values/config.xml b/service/res/values/config.xml
index cc80f608c..0264c3eae 100644
--- a/service/res/values/config.xml
+++ b/service/res/values/config.xml
@@ -355,20 +355,19 @@
config_wifiBssidBlocklistMonitorFailureStreakCap is set to 7-->
<integer translatable="false" name="config_wifiBssidBlocklistMonitorBaseBlockDurationMs"> 300000 </integer>
- <!-- Base block duration for a failure at low RSSI (less than the sufficient RSSI) used for
- ASSOCIATION_TIMEOUT, ABNORMAL_DISCONNECT, and NETWORK_VALIDATION failures. The block duration
- for a BSSID that keeps failing will grow exponentially to the this base duration.
+ <!-- Base duration to block a BSSID after the external connected scorer sets wifi as unusable.
+ The block duration is increased exponentially if the same BSSID is repeated marked as unusable.
ie. 0.5/1/2/4/8/16/32/64 minutes - capped at 64 minutes because the default for
- config_wifiBssidBlocklistMonitorFailureStreakCap is set to 7.
- This value should be configured to be less than config_wifiBssidBlocklistMonitorBaseBlockDurationMs -->
- <integer translatable="false" name="config_wifiBssidBlocklistMonitorBaseLowRssiBlockDurationMs"> 30000 </integer>
+ config_wifiBssidBlocklistMonitorFailureStreakCap is set to 7. The block duration is reset to
+ the base value 3 hours after the latest connection to this BSSID. -->
+ <integer translatable="false" name="config_wifiBssidBlocklistMonitorConnectedScoreBaseBlockDurationMs"> 30000 </integer>
<!-- The failure streak is the number of times a BSSID consecutively gets blocked without ever
successfully connecting in between, and is used to calculate the exponentially growing blocklist time.
The config_wifiBssidBlocklistMonitorFailureStreakCap controls how many times the block duration
could exponentially grow when a BSSID keeps failing.
ie. A value of 0 means BSSIDs are always blocked for the flat base duration defined by
- config_wifiBssidBlocklistMonitorBaseBlockDurationMs and config_wifiBssidBlocklistMonitorBaseLowRssiBlockDurationMs. -->
+ config_wifiBssidBlocklistMonitorBaseBlockDurationMs. -->
<integer translatable="false" name="config_wifiBssidBlocklistMonitorFailureStreakCap"> 7 </integer>
<!-- If a non-locally generated disconnect happens within this time window after association,
@@ -462,4 +461,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..60764ba6e 100644
--- a/service/res/values/overlayable.xml
+++ b/service/res/values/overlayable.xml
@@ -114,7 +114,7 @@
<item type="integer" name="config_wifiBssidBlocklistMonitorDhcpFailureThreshold" />
<item type="integer" name="config_wifiBssidBlocklistMonitorAbnormalDisconnectThreshold" />
<item type="integer" name="config_wifiBssidBlocklistMonitorBaseBlockDurationMs" />
- <item type="integer" name="config_wifiBssidBlocklistMonitorBaseLowRssiBlockDurationMs" />
+ <item type="integer" name="config_wifiBssidBlocklistMonitorConnectedScoreBaseBlockDurationMs" />
<item type="integer" name="config_wifiBssidBlocklistMonitorFailureStreakCap" />
<item type="integer" name="config_wifiBssidBlocklistAbnormalDisconnectTimeWindowMs" />
<item type="bool" name="config_wifiScanHiddenNetworksScanOnlyMode" />
@@ -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/service/res/values/strings.xml b/service/res/values/strings.xml
index 441ecca15..ae3f1977b 100644
--- a/service/res/values/strings.xml
+++ b/service/res/values/strings.xml
@@ -49,11 +49,11 @@
<string name="wifi_suggestion_action_disallow_app">No thanks</string>
<!-- Notification title for a connection to a SIM-based carrier network without IMSI privacy protection. -->
- <string name="wifi_suggestion_imsi_privacy_title"><xliff:g id="carrierName" example="xxxMobile">%s</xliff:g> wants to auto\u2011connect</string>
+ <string name="wifi_suggestion_imsi_privacy_title">Connect to <xliff:g id="carrierName" example="xxxMobile">%s</xliff:g> Wi\u2011Fi?</string>
<!-- Notification content for a connection to a SIM-based carrier network without IMSI privacy protection.-->
- <string name="wifi_suggestion_imsi_privacy_content">These networks receive a unique ID that can be used to track device location</string>
+ <string name="wifi_suggestion_imsi_privacy_content">These networks receive a SIM ID that can be used to track device location</string>
<!-- Notification action for allowing carrier specified in the notification body.-->
- <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier">Connect anyway</string>
+ <string name="wifi_suggestion_action_allow_imsi_privacy_exemption_carrier">Connect</string>
<!-- Notification action for disallowing carrier specified in the notification body.-->
<string name="wifi_suggestion_action_disallow_imsi_privacy_exemption_carrier">Don\u0027t connect</string>
<!-- Confirmation dialog title for a connection to a SIM-based carrier network without IMSI privacy protection. -->
diff --git a/tests/wifitests/src/com/android/server/wifi/BssidBlocklistMonitorTest.java b/tests/wifitests/src/com/android/server/wifi/BssidBlocklistMonitorTest.java
index 8cb2e376a..1007391e3 100644
--- a/tests/wifitests/src/com/android/server/wifi/BssidBlocklistMonitorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/BssidBlocklistMonitorTest.java
@@ -18,8 +18,10 @@ package com.android.server.wifi;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.times;
import android.content.Context;
+import android.net.wifi.ScanResult;
import android.util.LocalLog;
import androidx.test.filters.SmallTest;
@@ -32,6 +34,8 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -47,27 +51,36 @@ public class BssidBlocklistMonitorTest {
private static final String TEST_BSSID_1 = "0a:08:5c:67:89:00";
private static final String TEST_BSSID_2 = "0a:08:5c:67:89:01";
private static final String TEST_BSSID_3 = "0a:08:5c:67:89:02";
+ private static final int TEST_GOOD_RSSI = -50;
+ private static final int TEST_SUFFICIENT_RSSI = -67;
+ private static final int MIN_RSSI_DIFF_TO_UNBLOCK_BSSID = 5;
+ private static final int TEST_FRAMEWORK_BLOCK_REASON =
+ BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_MBO_OCE;
private static final int TEST_L2_FAILURE = BssidBlocklistMonitor.REASON_ASSOCIATION_REJECTION;
private static final int TEST_DHCP_FAILURE = BssidBlocklistMonitor.REASON_DHCP_FAILURE;
private static final long BASE_BLOCKLIST_DURATION = TimeUnit.MINUTES.toMillis(5); // 5 minutes
- private static final long BASE_LOW_RSSI_BLOCKLIST_DURATION = TimeUnit.SECONDS.toMillis(30);
+ private static final long BASE_CONNECTED_SCORE_BLOCKLIST_DURATION =
+ TimeUnit.SECONDS.toMillis(30);
private static final long ABNORMAL_DISCONNECT_TIME_WINDOW_MS = TimeUnit.SECONDS.toMillis(30);
private static final long ABNORMAL_DISCONNECT_RESET_TIME_MS = TimeUnit.HOURS.toMillis(3);
private static final int FAILURE_STREAK_CAP = 7;
- private static final int[] FAILURE_COUNT_DISABLE_THRESHOLD = {
- 1, // threshold for REASON_AP_UNABLE_TO_HANDLE_NEW_STA
- 1, // threshold for REASON_NETWORK_VALIDATION_FAILURE
- 1, // threshold for REASON_WRONG_PASSWORD
- 1, // threshold for REASON_EAP_FAILURE
- 3, // threshold for REASON_ASSOCIATION_REJECTION
- 3, // threshold for REASON_ASSOCIATION_TIMEOUT
- 3, // threshold for REASON_AUTHENTICATION_FAILURE
- 3, // threshold for REASON_DHCP_FAILURE
- 3 // threshold for REASON_ABNORMAL_DISCONNECT
- };
+ private static final Map<Integer, Integer> BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP =
+ Map.ofEntries(
+ Map.entry(BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA, 1),
+ Map.entry(BssidBlocklistMonitor.REASON_NETWORK_VALIDATION_FAILURE, 1),
+ Map.entry(BssidBlocklistMonitor.REASON_WRONG_PASSWORD, 1),
+ Map.entry(BssidBlocklistMonitor.REASON_EAP_FAILURE, 1),
+ Map.entry(BssidBlocklistMonitor.REASON_ASSOCIATION_REJECTION, 3),
+ Map.entry(BssidBlocklistMonitor.REASON_ASSOCIATION_TIMEOUT, 3),
+ Map.entry(BssidBlocklistMonitor.REASON_AUTHENTICATION_FAILURE, 3),
+ Map.entry(BssidBlocklistMonitor.REASON_DHCP_FAILURE, 3),
+ Map.entry(BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT, 3),
+ Map.entry(BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_MBO_OCE, 1),
+ Map.entry(BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_FAST_RECONNECT, 1),
+ Map.entry(BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE, 1)
+ );
private static final int NUM_FAILURES_TO_BLOCKLIST =
- FAILURE_COUNT_DISABLE_THRESHOLD[TEST_L2_FAILURE];
-
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(TEST_L2_FAILURE);
@Mock private Context mContext;
@Mock private WifiConnectivityHelper mWifiConnectivityHelper;
@@ -75,6 +88,7 @@ public class BssidBlocklistMonitorTest {
@Mock private Clock mClock;
@Mock private LocalLog mLocalLog;
@Mock private WifiScoreCard mWifiScoreCard;
+ @Mock private ScoringParams mScoringParams;
private MockResources mResources;
private BssidBlocklistMonitor mBssidBlocklistMonitor;
@@ -86,50 +100,60 @@ public class BssidBlocklistMonitorTest {
when(mWifiConnectivityHelper.isFirmwareRoamingSupported()).thenReturn(true);
when(mWifiConnectivityHelper.getMaxNumBlacklistBssid())
.thenReturn(TEST_NUM_MAX_FIRMWARE_SUPPORT_BSSIDS);
+ when(mScoringParams.getSufficientRssi(anyInt())).thenReturn(TEST_SUFFICIENT_RSSI);
mResources = new MockResources();
mResources.setInteger(R.integer.config_wifiBssidBlocklistMonitorBaseBlockDurationMs,
(int) BASE_BLOCKLIST_DURATION);
mResources.setInteger(
- R.integer.config_wifiBssidBlocklistMonitorBaseLowRssiBlockDurationMs,
- (int) BASE_LOW_RSSI_BLOCKLIST_DURATION);
+ R.integer.config_wifiBssidBlocklistMonitorConnectedScoreBaseBlockDurationMs,
+ (int) BASE_CONNECTED_SCORE_BLOCKLIST_DURATION);
mResources.setInteger(R.integer.config_wifiBssidBlocklistMonitorFailureStreakCap,
FAILURE_STREAK_CAP);
mResources.setInteger(R.integer.config_wifiBssidBlocklistAbnormalDisconnectTimeWindowMs,
(int) ABNORMAL_DISCONNECT_TIME_WINDOW_MS);
mResources.setInteger(
R.integer.config_wifiBssidBlocklistMonitorApUnableToHandleNewStaThreshold,
- FAILURE_COUNT_DISABLE_THRESHOLD[0]);
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(
+ BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA));
mResources.setInteger(
R.integer.config_wifiBssidBlocklistMonitorNetworkValidationFailureThreshold,
- FAILURE_COUNT_DISABLE_THRESHOLD[1]);
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(
+ BssidBlocklistMonitor.REASON_NETWORK_VALIDATION_FAILURE));
mResources.setInteger(R.integer.config_wifiBssidBlocklistMonitorWrongPasswordThreshold,
- FAILURE_COUNT_DISABLE_THRESHOLD[2]);
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(
+ BssidBlocklistMonitor.REASON_WRONG_PASSWORD));
mResources.setInteger(R.integer.config_wifiBssidBlocklistMonitorEapFailureThreshold,
- FAILURE_COUNT_DISABLE_THRESHOLD[3]);
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(
+ BssidBlocklistMonitor.REASON_EAP_FAILURE));
mResources.setInteger(
R.integer.config_wifiBssidBlocklistMonitorAssociationRejectionThreshold,
- FAILURE_COUNT_DISABLE_THRESHOLD[4]);
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(
+ BssidBlocklistMonitor.REASON_ASSOCIATION_REJECTION));
mResources.setInteger(
R.integer.config_wifiBssidBlocklistMonitorAssociationTimeoutThreshold,
- FAILURE_COUNT_DISABLE_THRESHOLD[5]);
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(
+ BssidBlocklistMonitor.REASON_ASSOCIATION_TIMEOUT));
mResources.setInteger(
R.integer.config_wifiBssidBlocklistMonitorAuthenticationFailureThreshold,
- FAILURE_COUNT_DISABLE_THRESHOLD[6]);
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(
+ BssidBlocklistMonitor.REASON_AUTHENTICATION_FAILURE));
mResources.setInteger(R.integer.config_wifiBssidBlocklistMonitorDhcpFailureThreshold,
- FAILURE_COUNT_DISABLE_THRESHOLD[7]);
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(
+ BssidBlocklistMonitor.REASON_DHCP_FAILURE));
mResources.setInteger(
R.integer.config_wifiBssidBlocklistMonitorAbnormalDisconnectThreshold,
- FAILURE_COUNT_DISABLE_THRESHOLD[8]);
+ BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.get(
+ BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT));
when(mContext.getResources()).thenReturn(mResources);
mBssidBlocklistMonitor = new BssidBlocklistMonitor(mContext, mWifiConnectivityHelper,
- mWifiLastResortWatchdog, mClock, mLocalLog, mWifiScoreCard);
+ mWifiLastResortWatchdog, mClock, mLocalLog, mWifiScoreCard, mScoringParams);
}
private void verifyAddTestBssidToBlocklist() {
mBssidBlocklistMonitor.handleBssidConnectionFailure(
TEST_BSSID_1, TEST_SSID_1,
- BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA, false);
+ BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA, TEST_GOOD_RSSI);
assertTrue(mBssidBlocklistMonitor.updateAndGetBssidBlocklist().contains(TEST_BSSID_1));
}
@@ -137,12 +161,15 @@ public class BssidBlocklistMonitorTest {
private void verifyAddMultipleBssidsToBlocklist() {
when(mClock.getWallClockMillis()).thenReturn(0L);
mBssidBlocklistMonitor.handleBssidConnectionFailure(TEST_BSSID_1,
- TEST_SSID_1, BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA, false);
+ TEST_SSID_1, BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA,
+ TEST_GOOD_RSSI);
when(mClock.getWallClockMillis()).thenReturn(1L);
mBssidBlocklistMonitor.handleBssidConnectionFailure(TEST_BSSID_2,
- TEST_SSID_1, BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA, false);
+ TEST_SSID_1, BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA,
+ TEST_GOOD_RSSI);
mBssidBlocklistMonitor.handleBssidConnectionFailure(TEST_BSSID_3,
- TEST_SSID_2, BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA, false);
+ TEST_SSID_2, BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA,
+ TEST_GOOD_RSSI);
// Verify that we have 3 BSSIDs in the blocklist.
Set<String> bssidList = mBssidBlocklistMonitor.updateAndGetBssidBlocklist();
@@ -159,18 +186,19 @@ public class BssidBlocklistMonitorTest {
private void handleBssidConnectionFailureMultipleTimes(String bssid, String ssid, int reason,
int times) {
for (int i = 0; i < times; i++) {
- mBssidBlocklistMonitor.handleBssidConnectionFailure(bssid, ssid, reason, false);
+ mBssidBlocklistMonitor.handleBssidConnectionFailure(bssid, ssid, reason,
+ TEST_GOOD_RSSI);
}
}
/**
- * Verify getNumBlockedBssidsForSsid returns the correct number of blocked BSSIDs.
+ * Verify updateAndGetNumBlockedBssidsForSsid returns the correct number of blocked BSSIDs.
*/
@Test
- public void testGetNumBlockedBssidsForSsid() {
+ public void testUpdateAndGetNumBlockedBssidsForSsid() {
verifyAddMultipleBssidsToBlocklist();
- assertEquals(2, mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(TEST_SSID_1));
- assertEquals(1, mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(TEST_SSID_2));
+ assertEquals(2, mBssidBlocklistMonitor.updateAndGetNumBlockedBssidsForSsid(TEST_SSID_1));
+ assertEquals(1, mBssidBlocklistMonitor.updateAndGetNumBlockedBssidsForSsid(TEST_SSID_2));
}
/**
@@ -192,19 +220,31 @@ public class BssidBlocklistMonitorTest {
}
/**
- * Verify that a BSSID is blocked for a shorter time if the failure reason is association
- * timeout and the RSSI is low.
+ * Verify that updateAndGetBssidBlocklist(ssid) updates firmware roaming configuration
+ * if a BSSID that belongs to the ssid is removed from blocklist.
*/
@Test
- public void testAssociationTimeoutAtLowRssi() {
- for (int i = 0; i < NUM_FAILURES_TO_BLOCKLIST; i++) {
- mBssidBlocklistMonitor.handleBssidConnectionFailure(TEST_BSSID_1, TEST_SSID_1,
- BssidBlocklistMonitor.REASON_ASSOCIATION_TIMEOUT, true);
- }
- when(mClock.getWallClockMillis()).thenReturn(BASE_LOW_RSSI_BLOCKLIST_DURATION);
- assertEquals(1, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
- when(mClock.getWallClockMillis()).thenReturn(BASE_LOW_RSSI_BLOCKLIST_DURATION + 1);
- assertEquals(0, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
+ public void testBssidRemovalUpdatesFirmwareConfiguration() {
+ verifyAddTestBssidToBlocklist();
+ when(mClock.getWallClockMillis()).thenReturn(BASE_BLOCKLIST_DURATION + 1);
+ assertEquals(0, mBssidBlocklistMonitor
+ .updateAndGetBssidBlocklistForSsid(TEST_SSID_1).size());
+ verify(mWifiConnectivityHelper).setFirmwareRoamingConfiguration(eq(new ArrayList<>()),
+ eq(new ArrayList<>()));
+ }
+
+ /**
+ * Verify that updateAndGetBssidBlocklist(ssid) does not update firmware roaming configuration
+ * if there are no BSSIDs belonging to the ssid removed from blocklist.
+ */
+ @Test
+ public void testBssidRemovalNotUpdateFirmwareConfiguration() {
+ verifyAddTestBssidToBlocklist();
+ when(mClock.getWallClockMillis()).thenReturn(BASE_BLOCKLIST_DURATION + 1);
+ assertEquals(0, mBssidBlocklistMonitor
+ .updateAndGetBssidBlocklistForSsid(TEST_SSID_2).size());
+ verify(mWifiConnectivityHelper, never()).setFirmwareRoamingConfiguration(
+ eq(new ArrayList<>()), eq(new ArrayList<>()));
}
/**
@@ -279,7 +319,7 @@ public class BssidBlocklistMonitorTest {
.thenReturn(0L);
when(mClock.getWallClockMillis()).thenReturn(ABNORMAL_DISCONNECT_TIME_WINDOW_MS + 1);
assertFalse(mBssidBlocklistMonitor.handleBssidConnectionFailure(TEST_BSSID_1, TEST_SSID_1,
- BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT, false));
+ BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT, TEST_GOOD_RSSI));
verify(mWifiScoreCard, never()).incrementBssidBlocklistStreak(TEST_SSID_1, TEST_BSSID_1,
BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT);
@@ -287,7 +327,7 @@ public class BssidBlocklistMonitorTest {
// added to blocklist.
when(mClock.getWallClockMillis()).thenReturn(ABNORMAL_DISCONNECT_TIME_WINDOW_MS);
assertTrue(mBssidBlocklistMonitor.handleBssidConnectionFailure(TEST_BSSID_1, TEST_SSID_1,
- BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT, false));
+ BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT, TEST_GOOD_RSSI));
verify(mWifiScoreCard).incrementBssidBlocklistStreak(TEST_SSID_1, TEST_BSSID_1,
BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT);
}
@@ -301,7 +341,7 @@ public class BssidBlocklistMonitorTest {
when(mWifiScoreCard.getBssidBlocklistStreak(anyString(), anyString(), anyInt()))
.thenReturn(1);
assertTrue(mBssidBlocklistMonitor.handleBssidConnectionFailure(
- TEST_BSSID_1, TEST_SSID_1, TEST_L2_FAILURE, false));
+ TEST_BSSID_1, TEST_SSID_1, TEST_L2_FAILURE, TEST_GOOD_RSSI));
assertTrue(mBssidBlocklistMonitor.updateAndGetBssidBlocklist().contains(TEST_BSSID_1));
}
@@ -373,6 +413,8 @@ public class BssidBlocklistMonitorTest {
ABNORMAL_DISCONNECT_RESET_TIME_MS + 1);
verify(mWifiScoreCard).resetBssidBlocklistStreak(TEST_SSID_1, TEST_BSSID_1,
BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT);
+ verify(mWifiScoreCard).resetBssidBlocklistStreak(TEST_SSID_1, TEST_BSSID_1,
+ BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE);
}
/**
@@ -389,6 +431,20 @@ public class BssidBlocklistMonitorTest {
}
/**
+ * Verify that the streak count for REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE is not reset
+ * if insufficient time has passed.
+ */
+ @Test
+ public void testNetworkConnectionNotResetConnectedScoreStreak() {
+ when(mClock.getWallClockMillis()).thenReturn(ABNORMAL_DISCONNECT_RESET_TIME_MS);
+ mBssidBlocklistMonitor.handleBssidConnectionSuccess(TEST_BSSID_1, TEST_SSID_1);
+ verify(mWifiScoreCard).setBssidConnectionTimestampMs(TEST_SSID_1, TEST_BSSID_1,
+ ABNORMAL_DISCONNECT_RESET_TIME_MS);
+ verify(mWifiScoreCard, never()).resetBssidBlocklistStreak(TEST_SSID_1, TEST_BSSID_1,
+ BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE);
+ }
+
+ /**
* Verify that handleDhcpProvisioningSuccess resets appropriate blocklist streak counts.
*/
@Test
@@ -433,18 +489,23 @@ public class BssidBlocklistMonitorTest {
*/
@Test
public void testIncrementingBlocklistStreakCount() {
- verifyAddTestBssidToBlocklist();
- // verify that the blocklist streak is incremented
- verify(mWifiScoreCard).incrementBssidBlocklistStreak(TEST_SSID_1, TEST_BSSID_1,
- BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA);
+ for (Map.Entry<Integer, Integer> entry : BLOCK_REASON_TO_DISABLE_THRESHOLD_MAP.entrySet()) {
+ int reason = entry.getKey();
+ int threshold = entry.getValue();
+ when(mClock.getWallClockMillis()).thenReturn(0L);
+ handleBssidConnectionFailureMultipleTimes(TEST_BSSID_1, TEST_SSID_1, reason, threshold);
- // Verify that TEST_BSSID_1 is removed from the blocklist after the timeout duration.
- when(mClock.getWallClockMillis()).thenReturn(BASE_BLOCKLIST_DURATION + 1);
- assertEquals(0, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
+ // verify that the blocklist streak is incremented
+ verify(mWifiScoreCard).incrementBssidBlocklistStreak(TEST_SSID_1, TEST_BSSID_1, reason);
- // But the blacklist streak count is not cleared
- verify(mWifiScoreCard, never()).resetBssidBlocklistStreak(TEST_SSID_1, TEST_BSSID_1,
- BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA);
+ // Verify that TEST_BSSID_1 is removed from the blocklist after the timeout duration.
+ when(mClock.getWallClockMillis()).thenReturn(BASE_BLOCKLIST_DURATION + 1);
+ assertEquals(0, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
+
+ // But the blocklist streak count is not cleared
+ verify(mWifiScoreCard, never()).resetBssidBlocklistStreak(TEST_SSID_1, TEST_BSSID_1,
+ reason);
+ }
}
/**
@@ -542,7 +603,8 @@ public class BssidBlocklistMonitorTest {
for (int i = 0; i < 10; i++) {
when(mClock.getWallClockMillis()).thenReturn((long) i);
mBssidBlocklistMonitor.handleBssidConnectionFailure(bssid + i,
- TEST_SSID_1, BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA, false);
+ TEST_SSID_1, BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA,
+ TEST_GOOD_RSSI);
// This will build a List of BSSIDs starting from the latest added ones that is at
// most size |TEST_NUM_MAX_FIRMWARE_SUPPORT_BSSIDS|.
@@ -645,7 +707,8 @@ public class BssidBlocklistMonitorTest {
public void testBlockBssidForDurationMs() {
when(mClock.getWallClockMillis()).thenReturn(0L);
long testDuration = 5500L;
- mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_1, TEST_SSID_1, testDuration);
+ mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_1, TEST_SSID_1, testDuration,
+ TEST_FRAMEWORK_BLOCK_REASON, TEST_GOOD_RSSI);
assertEquals(1, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
// Verify that the BSSID is removed from blocklist by clearBssidBlocklistForSsid
@@ -654,7 +717,8 @@ public class BssidBlocklistMonitorTest {
assertEquals(1, mBssidBlocklistMonitor.getBssidStatusHistoryLoggerSize());
// Add the BSSID to blocklist again.
- mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_1, TEST_SSID_1, testDuration);
+ mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_1, TEST_SSID_1, testDuration,
+ TEST_FRAMEWORK_BLOCK_REASON, TEST_GOOD_RSSI);
assertEquals(1, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
// Verify that the BSSID is removed from blocklist once the specified duration is over.
@@ -671,15 +735,105 @@ public class BssidBlocklistMonitorTest {
// test invalid BSSID
when(mClock.getWallClockMillis()).thenReturn(0L);
long testDuration = 5500L;
- mBssidBlocklistMonitor.blockBssidForDurationMs(null, TEST_SSID_1, testDuration);
+ mBssidBlocklistMonitor.blockBssidForDurationMs(null, TEST_SSID_1, testDuration,
+ TEST_FRAMEWORK_BLOCK_REASON, TEST_GOOD_RSSI);
assertEquals(0, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
// test invalid SSID
- mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_1, null, testDuration);
+ mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_1, null, testDuration,
+ TEST_FRAMEWORK_BLOCK_REASON, TEST_GOOD_RSSI);
assertEquals(0, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
// test invalid duration
- mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_1, TEST_SSID_1, -1);
+ mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_1, TEST_SSID_1, -1,
+ TEST_FRAMEWORK_BLOCK_REASON, TEST_GOOD_RSSI);
assertEquals(0, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
}
+
+ private void simulateRssiUpdate(String bssid, int rssi) {
+ ScanDetail scanDetail = mock(ScanDetail.class);
+ ScanResult scanResult = mock(ScanResult.class);
+ scanResult.BSSID = bssid;
+ scanResult.level = rssi;
+ when(scanDetail.getScanResult()).thenReturn(scanResult);
+ List<ScanDetail> scanDetails = new ArrayList<>();
+ scanDetails.add(scanDetail);
+ mBssidBlocklistMonitor.tryEnablingBlockedBssids(scanDetails);
+ }
+
+ /**
+ * Verify that if the RSSI is low when the BSSID is blocked, a RSSI improvement will remove
+ * the BSSID from blocklist.
+ */
+ @Test
+ public void testUnblockBssidAfterRssiImproves() {
+ when(mClock.getWallClockMillis()).thenReturn(0L);
+ // verify TEST_BSSID_1 is blocked
+ mBssidBlocklistMonitor.handleBssidConnectionFailure(
+ TEST_BSSID_1, TEST_SSID_1, BssidBlocklistMonitor.REASON_EAP_FAILURE,
+ TEST_SUFFICIENT_RSSI - MIN_RSSI_DIFF_TO_UNBLOCK_BSSID);
+ assertTrue(mBssidBlocklistMonitor.updateAndGetBssidBlocklist().contains(TEST_BSSID_1));
+
+ // verify the blocklist is not cleared when the rssi improvement is not large enough.
+ simulateRssiUpdate(TEST_BSSID_1, TEST_SUFFICIENT_RSSI - 1);
+ assertTrue(mBssidBlocklistMonitor.updateAndGetBssidBlocklist().contains(TEST_BSSID_1));
+
+ // verify TEST_BSSID_1 is removed from the blocklist after RSSI improves
+ simulateRssiUpdate(TEST_BSSID_1, TEST_SUFFICIENT_RSSI);
+ assertEquals(0, mBssidBlocklistMonitor.updateAndGetBssidBlocklist().size());
+ }
+
+ /**
+ * Verify that if the RSSI is already good when the BSSID is blocked, a RSSI improvement will
+ * not remove the BSSID from blocklist.
+ */
+ @Test
+ public void testBssidNotUnblockedIfRssiAlreadyGood() {
+ when(mClock.getWallClockMillis()).thenReturn(0L);
+ // verify TEST_BSSID_1 is blocked
+ mBssidBlocklistMonitor.handleBssidConnectionFailure(
+ TEST_BSSID_1, TEST_SSID_1, BssidBlocklistMonitor.REASON_EAP_FAILURE,
+ TEST_SUFFICIENT_RSSI);
+ assertTrue(mBssidBlocklistMonitor.updateAndGetBssidBlocklist().contains(TEST_BSSID_1));
+
+ // verify TEST_BSSID_1 is not removed from blocklist
+ simulateRssiUpdate(TEST_BSSID_1, TEST_GOOD_RSSI);
+ assertTrue(mBssidBlocklistMonitor.updateAndGetBssidBlocklist().contains(TEST_BSSID_1));
+ }
+
+ /**
+ * Verify that the logic to unblock BSSIDs after RSSI improvement does not apply for some
+ * failure reasons.
+ */
+ @Test
+ public void testRssiImprovementNotUnblockBssidForSomeFailureReasons() {
+ when(mClock.getWallClockMillis()).thenReturn(0L);
+ mBssidBlocklistMonitor.handleBssidConnectionFailure(
+ TEST_BSSID_1, TEST_SSID_1, BssidBlocklistMonitor.REASON_WRONG_PASSWORD,
+ TEST_SUFFICIENT_RSSI - MIN_RSSI_DIFF_TO_UNBLOCK_BSSID);
+ assertTrue(mBssidBlocklistMonitor.updateAndGetBssidBlocklist().contains(TEST_BSSID_1));
+
+ simulateRssiUpdate(TEST_BSSID_1, TEST_SUFFICIENT_RSSI);
+ assertTrue(mBssidBlocklistMonitor.updateAndGetBssidBlocklist().contains(TEST_BSSID_1));
+ }
+
+ /**
+ * Verify the failure reasons for all blocked BSSIDs are retrieved.
+ */
+ @Test
+ public void testGetFailureReasonsForSsid() {
+ // Null input should not crash
+ mBssidBlocklistMonitor.getFailureReasonsForSsid(null).size();
+ assertEquals(0, mBssidBlocklistMonitor.getFailureReasonsForSsid(TEST_SSID_1).size());
+ mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_1, TEST_SSID_1, 1000,
+ BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA, TEST_GOOD_RSSI);
+ mBssidBlocklistMonitor.blockBssidForDurationMs(TEST_BSSID_2, TEST_SSID_1, 1000,
+ BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT, TEST_GOOD_RSSI);
+
+ assertEquals(2, mBssidBlocklistMonitor.getFailureReasonsForSsid(TEST_SSID_1).size());
+ assertTrue(mBssidBlocklistMonitor.getFailureReasonsForSsid(TEST_SSID_1)
+ .contains(BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA));
+ assertTrue(mBssidBlocklistMonitor.getFailureReasonsForSsid(TEST_SSID_1)
+ .contains(BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT));
+ }
}
diff --git a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
index 23726786d..d4af7ecac 100644
--- a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
@@ -1114,6 +1114,23 @@ public class ClientModeImplTest extends WifiBaseTest {
}
/**
+ * When the SIM card was removed, if the current wifi connection is using it, the connection
+ * should be disconnected, otherwise, the connection shouldn't be impacted.
+ */
+ @Test
+ public void testResetSimWhenConnectedSimRemovedAfterNetworkRemoval() throws Exception {
+ setupEapSimConnection();
+ doReturn(false).when(mWifiCarrierInfoManager).isSimPresent(eq(DATA_SUBID));
+ when(mWifiConfigManager.getConfiguredNetwork(anyInt())).thenReturn(null);
+ mCmi.sendMessage(ClientModeImpl.CMD_RESET_SIM_NETWORKS,
+ ClientModeImpl.RESET_SIM_REASON_SIM_REMOVED);
+ mLooper.dispatchAll();
+
+ verify(mSimRequiredNotifier, never()).showSimRequiredNotification(any(), any());
+ assertEquals("ObtainingIpState", getCurrentState().getName());
+ }
+
+ /**
* When the default data SIM is changed, if the current wifi connection is carrier wifi,
* the connection should be disconnected.
*/
@@ -1742,10 +1759,10 @@ public class ClientModeImplTest extends WifiBaseTest {
// by DHCP failure
verify(mWifiLastResortWatchdog, times(2)).noteConnectionFailureAndTriggerIfNeeded(
sSSID, sBSSID, WifiLastResortWatchdog.FAILURE_CODE_DHCP);
- verify(mBssidBlocklistMonitor, times(2)).handleBssidConnectionFailure(sBSSID,
- sSSID, BssidBlocklistMonitor.REASON_DHCP_FAILURE, false);
- verify(mBssidBlocklistMonitor, times(2)).handleBssidConnectionFailure(sBSSID, sSSID,
- BssidBlocklistMonitor.REASON_DHCP_FAILURE, false);
+ verify(mBssidBlocklistMonitor, times(2)).handleBssidConnectionFailure(eq(sBSSID),
+ eq(sSSID), eq(BssidBlocklistMonitor.REASON_DHCP_FAILURE), anyInt());
+ verify(mBssidBlocklistMonitor, times(2)).handleBssidConnectionFailure(eq(sBSSID), eq(sSSID),
+ eq(BssidBlocklistMonitor.REASON_DHCP_FAILURE), anyInt());
verify(mBssidBlocklistMonitor, never()).handleDhcpProvisioningSuccess(sBSSID, sSSID);
verify(mBssidBlocklistMonitor, never()).handleNetworkValidationSuccess(sBSSID, sSSID);
}
@@ -2364,6 +2381,7 @@ public class ClientModeImplTest extends WifiBaseTest {
inOrderMetrics.verify(mWifiMetrics).logStaEvent(StaEvent.TYPE_WIFI_DISABLED);
assertNull(wifiInfo.getBSSID());
assertEquals(SupplicantState.DISCONNECTED, wifiInfo.getSupplicantState());
+ verify(mPasspointManager).clearAnqpRequestsAndFlushCache();
// Send a SUPPLICANT_STATE_CHANGE_EVENT, verify WifiInfo is not updated
mCmi.sendMessage(WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT, 0, 0,
@@ -3136,8 +3154,8 @@ public class ClientModeImplTest extends WifiBaseTest {
mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, 0, 0, sBSSID);
mLooper.dispatchAll();
- verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(sBSSID, sSSID,
- BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT, false);
+ verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(eq(sBSSID), eq(sSSID),
+ eq(BssidBlocklistMonitor.REASON_ABNORMAL_DISCONNECT), anyInt());
}
/**
@@ -3146,6 +3164,7 @@ public class ClientModeImplTest extends WifiBaseTest {
*/
@Test
public void testNotifiesBssidBlocklistMonitorLowRssi() throws Exception {
+ int testLowRssi = -80;
initializeAndAddNetworkAndVerifySuccess();
mCmi.sendMessage(ClientModeImpl.CMD_START_CONNECT, FRAMEWORK_NETWORK_ID, 0,
ClientModeImpl.SUPPLICANT_BSSID_ANY);
@@ -3154,13 +3173,13 @@ public class ClientModeImplTest extends WifiBaseTest {
when(mWifiConfigManager.getScanDetailCacheForNetwork(FRAMEWORK_NETWORK_ID))
.thenReturn(mScanDetailCache);
when(mScanDetailCache.getScanDetail(sBSSID)).thenReturn(
- getGoogleGuestScanDetail(-80, sBSSID, sFreq));
+ getGoogleGuestScanDetail(testLowRssi, sBSSID, sFreq));
when(mScanDetailCache.getScanResult(sBSSID)).thenReturn(
- getGoogleGuestScanDetail(-80, sBSSID, sFreq).getScanResult());
+ getGoogleGuestScanDetail(testLowRssi, sBSSID, sFreq).getScanResult());
mLooper.dispatchAll();
verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(sBSSID, sSSID,
- BssidBlocklistMonitor.REASON_ASSOCIATION_TIMEOUT, true);
+ BssidBlocklistMonitor.REASON_ASSOCIATION_TIMEOUT, testLowRssi);
}
/**
@@ -3178,8 +3197,8 @@ public class ClientModeImplTest extends WifiBaseTest {
mLooper.dispatchAll();
verify(mWifiLastResortWatchdog, never()).noteConnectionFailureAndTriggerIfNeeded(
anyString(), anyString(), anyInt());
- verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(sBSSID, sSSID,
- BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA, false);
+ verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(eq(sBSSID), eq(sSSID),
+ eq(BssidBlocklistMonitor.REASON_AP_UNABLE_TO_HANDLE_NEW_STA), anyInt());
}
/**
@@ -3197,8 +3216,8 @@ public class ClientModeImplTest extends WifiBaseTest {
mLooper.dispatchAll();
verify(mWifiLastResortWatchdog).noteConnectionFailureAndTriggerIfNeeded(
anyString(), anyString(), anyInt());
- verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(sBSSID, sSSID,
- BssidBlocklistMonitor.REASON_ASSOCIATION_REJECTION, false);
+ verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(eq(sBSSID), eq(sSSID),
+ eq(BssidBlocklistMonitor.REASON_ASSOCIATION_REJECTION), anyInt());
verify(mWifiMetrics).incrementNumOfCarrierWifiConnectionNonAuthFailure();
}
@@ -3219,8 +3238,8 @@ public class ClientModeImplTest extends WifiBaseTest {
mLooper.dispatchAll();
verify(mWifiLastResortWatchdog, never()).noteConnectionFailureAndTriggerIfNeeded(
anyString(), anyString(), anyInt());
- verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(sBSSID, sSSID,
- BssidBlocklistMonitor.REASON_WRONG_PASSWORD, false);
+ verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(eq(sBSSID), eq(sSSID),
+ eq(BssidBlocklistMonitor.REASON_WRONG_PASSWORD), anyInt());
}
/**
@@ -3240,8 +3259,8 @@ public class ClientModeImplTest extends WifiBaseTest {
mLooper.dispatchAll();
verify(mWifiLastResortWatchdog, never()).noteConnectionFailureAndTriggerIfNeeded(
anyString(), anyString(), anyInt());
- verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(sBSSID, sSSID,
- BssidBlocklistMonitor.REASON_EAP_FAILURE, false);
+ verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(eq(sBSSID), eq(sSSID),
+ eq(BssidBlocklistMonitor.REASON_EAP_FAILURE), anyInt());
}
/**
@@ -3260,8 +3279,8 @@ public class ClientModeImplTest extends WifiBaseTest {
mLooper.dispatchAll();
verify(mWifiLastResortWatchdog).noteConnectionFailureAndTriggerIfNeeded(
anyString(), anyString(), anyInt());
- verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(sBSSID, sSSID,
- BssidBlocklistMonitor.REASON_AUTHENTICATION_FAILURE, false);
+ verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(eq(sBSSID), eq(sSSID),
+ eq(BssidBlocklistMonitor.REASON_AUTHENTICATION_FAILURE), anyInt());
}
/**
@@ -3578,7 +3597,7 @@ public class ClientModeImplTest extends WifiBaseTest {
verify(mWifiConfigManager).updateNetworkSelectionStatus(
FRAMEWORK_NETWORK_ID, DISABLED_NO_INTERNET_TEMPORARY);
verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(sBSSID, sSSID,
- BssidBlocklistMonitor.REASON_NETWORK_VALIDATION_FAILURE, true);
+ BssidBlocklistMonitor.REASON_NETWORK_VALIDATION_FAILURE, RSSI_THRESHOLD_BREACH_MIN);
verify(mWifiScoreCard).noteValidationFailure(any());
}
@@ -4328,12 +4347,12 @@ public class ClientModeImplTest extends WifiBaseTest {
}
/**
- * Test that handleBssTransitionRequest() blacklist the BSS upon
+ * Test that handleBssTransitionRequest() blocklist the BSS upon
* receiving BTM request frame that contains MBO-OCE IE with an
* association retry delay attribute.
*/
@Test
- public void testBtmFrameWithMboAssocretryDelayBlackListTheBssid() throws Exception {
+ public void testBtmFrameWithMboAssocretryDelayBlockListTheBssid() throws Exception {
// Connect to network with |sBSSID|, |sFreq|.
connect();
@@ -4342,14 +4361,37 @@ public class ClientModeImplTest extends WifiBaseTest {
btmFrmData.mStatus = MboOceConstants.BTM_RESPONSE_STATUS_REJECT_UNSPECIFIED;
btmFrmData.mBssTmDataFlagsMask = MboOceConstants.BTM_DATA_FLAG_DISASSOCIATION_IMMINENT
| MboOceConstants.BTM_DATA_FLAG_MBO_ASSOC_RETRY_DELAY_INCLUDED;
- btmFrmData.mBlackListDurationMs = 60000;
+ btmFrmData.mBlockListDurationMs = 60000;
mCmi.sendMessage(WifiMonitor.MBO_OCE_BSS_TM_HANDLING_DONE, btmFrmData);
mLooper.dispatchAll();
verify(mWifiMetrics, times(1)).incrementSteeringRequestCountIncludingMboAssocRetryDelay();
- verify(mBssidBlocklistMonitor).blockBssidForDurationMs(sBSSID, sSSID,
- btmFrmData.mBlackListDurationMs);
+ verify(mBssidBlocklistMonitor).blockBssidForDurationMs(eq(sBSSID), eq(sSSID),
+ eq(btmFrmData.mBlockListDurationMs), anyInt(), anyInt());
+ }
+
+ /**
+ * Test that handleBssTransitionRequest() blocklist the BSS upon
+ * receiving BTM request frame that contains disassociation imminent bit
+ * set to 1.
+ */
+ @Test
+ public void testBtmFrameWithDisassocImminentBitBlockListTheBssid() throws Exception {
+ // Connect to network with |sBSSID|, |sFreq|.
+ connect();
+
+ MboOceController.BtmFrameData btmFrmData = new MboOceController.BtmFrameData();
+
+ btmFrmData.mStatus = MboOceConstants.BTM_RESPONSE_STATUS_ACCEPT;
+ btmFrmData.mBssTmDataFlagsMask = MboOceConstants.BTM_DATA_FLAG_DISASSOCIATION_IMMINENT;
+
+ mCmi.sendMessage(WifiMonitor.MBO_OCE_BSS_TM_HANDLING_DONE, btmFrmData);
+ mLooper.dispatchAll();
+
+ verify(mWifiMetrics, never()).incrementSteeringRequestCountIncludingMboAssocRetryDelay();
+ verify(mBssidBlocklistMonitor).blockBssidForDurationMs(eq(sBSSID), eq(sSSID),
+ eq(MboOceConstants.DEFAULT_BLOCKLIST_DURATION_MS), anyInt(), anyInt());
}
/**
@@ -4367,13 +4409,13 @@ public class ClientModeImplTest extends WifiBaseTest {
btmFrmData.mBssTmDataFlagsMask = MboOceConstants.BTM_DATA_FLAG_DISASSOCIATION_IMMINENT
| MboOceConstants.BTM_DATA_FLAG_BSS_TERMINATION_INCLUDED
| MboOceConstants.BTM_DATA_FLAG_MBO_CELL_DATA_CONNECTION_PREFERENCE_INCLUDED;
- btmFrmData.mBlackListDurationMs = 60000;
+ btmFrmData.mBlockListDurationMs = 60000;
mCmi.sendMessage(WifiMonitor.MBO_OCE_BSS_TM_HANDLING_DONE, btmFrmData);
mLooper.dispatchAll();
- verify(mBssidBlocklistMonitor, never()).blockBssidForDurationMs(sBSSID, sSSID,
- btmFrmData.mBlackListDurationMs);
+ verify(mBssidBlocklistMonitor, never()).blockBssidForDurationMs(eq(sBSSID), eq(sSSID),
+ eq(btmFrmData.mBlockListDurationMs), anyInt(), anyInt());
verify(mWifiConnectivityManager).forceConnectivityScan(ClientModeImpl.WIFI_WORK_SOURCE);
verify(mWifiMetrics, times(1)).incrementMboCellularSwitchRequestCount();
verify(mWifiMetrics, times(1))
@@ -4807,8 +4849,8 @@ public class ClientModeImplTest extends WifiBaseTest {
*
*/
private void setupFilsEnabledApInScanResult() {
- String caps = "[WPA2-EAP+EAP-SHA256+FILS-SHA256-CCMP]"
- + "[RSN-EAP+EAP-SHA256+FILS-SHA256-CCMP][ESS]";
+ String caps = "[WPA2-EAP+EAP-SHA256+EAP-FILS-SHA256-CCMP]"
+ + "[RSN-EAP+EAP-SHA256+EAP-FILS-SHA256-CCMP][ESS]";
ScanResult scanResult = new ScanResult(WifiSsid.createFromAsciiEncoded(sFilsSsid),
sFilsSsid, sBSSID, 1245, 0, caps, -78, 2412, 1025, 22, 33, 20, 0, 0, true);
ScanResult.InformationElement ie = createIE(ScanResult.InformationElement.EID_SSID,
@@ -4944,7 +4986,7 @@ public class ClientModeImplTest extends WifiBaseTest {
verify(mWifiMetrics, times(1)).incrementConnectRequestWithFilsAkmCount();
- mCmi.sendMessage(WifiMonitor.FILS_NETWORK_CONNECTION_EVENT, 0, 0, sBSSID);
+ mCmi.sendMessage(WifiMonitor.NETWORK_CONNECTION_EVENT, 0, 1, sBSSID);
mLooper.dispatchAll();
verify(mWifiMetrics, times(1)).incrementL2ConnectionThroughFilsAuthCount();
@@ -5295,4 +5337,28 @@ public class ClientModeImplTest extends WifiBaseTest {
assertEquals(mNetwork, mCmi.syncGetCurrentNetwork(mCmiAsyncChannel));
mLooper.stopAutoDispatch();
}
+
+ @Test
+ public void clearRequestingPackageNameInWifiInfoOnConnectionFailure() throws Exception {
+ mConnectedNetwork.fromWifiNetworkSpecifier = true;
+ mConnectedNetwork.ephemeral = true;
+ mConnectedNetwork.creatorName = OP_PACKAGE_NAME;
+
+ triggerConnect();
+
+ // association completed
+ mCmi.sendMessage(WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT, 0, 0,
+ new StateChangeResult(0, sWifiSsid, sBSSID, SupplicantState.ASSOCIATED));
+ mLooper.dispatchAll();
+
+ assertTrue(mCmi.getWifiInfo().isEphemeral());
+ assertEquals(OP_PACKAGE_NAME, mCmi.getWifiInfo().getRequestingPackageName());
+
+ // fail the connection.
+ mCmi.sendMessage(WifiMonitor.NETWORK_DISCONNECTION_EVENT, FRAMEWORK_NETWORK_ID, 0, sBSSID);
+ mLooper.dispatchAll();
+
+ assertFalse(mCmi.getWifiInfo().isEphemeral());
+ assertNull(mCmi.getWifiInfo().getRequestingPackageName());
+ }
}
diff --git a/tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java b/tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java
index bb03d42d7..a570d2948 100644
--- a/tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/DeviceConfigFacadeTest.java
@@ -205,6 +205,12 @@ 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());
+ assertEquals(DeviceConfigFacade.DEFAULT_RSSI_THRESHOLD_NOT_SEND_LOW_SCORE_TO_CS_DBM,
+ mDeviceConfigFacade.getRssiThresholdNotSendLowScoreToCsDbm());
}
/**
@@ -307,6 +313,12 @@ 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);
+ when(DeviceConfig.getInt(anyString(), eq("rssi_threshold_not_send_low_score_to_cs_dbm"),
+ anyInt())).thenReturn(-70);
mOnPropertiesChangedListenerCaptor.getValue().onPropertiesChanged(null);
// Verifying fields are updated to the new values
@@ -363,5 +375,8 @@ 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());
+ assertEquals(-70, mDeviceConfigFacade.getRssiThresholdNotSendLowScoreToCsDbm());
}
}
diff --git a/tests/wifitests/src/com/android/server/wifi/EapFailureNotifierTest.java b/tests/wifitests/src/com/android/server/wifi/EapFailureNotifierTest.java
index d2a3ac0dc..26391334c 100644
--- a/tests/wifitests/src/com/android/server/wifi/EapFailureNotifierTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/EapFailureNotifierTest.java
@@ -21,12 +21,17 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSess
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
+import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.net.wifi.WifiConfiguration;
+import android.os.UserHandle;
import android.provider.Settings;
import android.service.notification.StatusBarNotification;
import android.telephony.SubscriptionManager;
@@ -42,13 +47,18 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoSession;
+import java.util.Arrays;
+
/**
* Unit tests for {@link com.android.server.wifi.EapFailureNotifier}.
*/
@SmallTest
public class EapFailureNotifierTest extends WifiBaseTest {
+ private static final String TEST_SETTINGS_PACKAGE = "android";
+
@Mock WifiContext mContext;
@Mock Resources mResources;
+ @Mock PackageManager mPackageManager;
@Mock NotificationManager mNotificationManager;
@Mock FrameworkFacade mFrameworkFacade;
@Mock Notification mNotification;
@@ -65,6 +75,7 @@ public class EapFailureNotifierTest extends WifiBaseTest {
private static final String UNDEFINED_ERROR_RESOURCE_NAME = "wifi_eap_error_message_code_12345";
private MockitoSession mStaticMockSession = null;
+
EapFailureNotifier mEapFailureNotifier;
/**
@@ -73,15 +84,26 @@ public class EapFailureNotifierTest extends WifiBaseTest {
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
+ ResolveInfo settingsResolveInfo = new ResolveInfo();
+ settingsResolveInfo.activityInfo = new ActivityInfo();
+ settingsResolveInfo.activityInfo.packageName = TEST_SETTINGS_PACKAGE;
+ when(mPackageManager.queryIntentActivitiesAsUser(
+ argThat(((intent) -> intent.getAction().equals(Settings.ACTION_WIFI_SETTINGS))),
+ anyInt(), any()))
+ .thenReturn(Arrays.asList(settingsResolveInfo));
+ // static mocking
mStaticMockSession = mockitoSession()
.mockStatic(SubscriptionManager.class)
+ .mockStatic(ActivityManager.class, withSettings().lenient())
.startMocking();
+ when(ActivityManager.getCurrentUser()).thenReturn(UserHandle.USER_SYSTEM);
when(mContext.getSystemService(NotificationManager.class))
.thenReturn(mNotificationManager);
when(mWifiCarrierInfoManager.getBestMatchSubscriptionId(mWifiConfiguration)).thenReturn(0);
lenient().when(SubscriptionManager.getResourcesForSubId(eq(mContext), anyInt()))
.thenReturn(mResources);
when(mContext.getResources()).thenReturn(mResources);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mResources.getIdentifier(eq(DEFINED_ERROR_RESOURCE_NAME), anyString(),
anyString())).thenReturn(1);
when(mResources.getIdentifier(eq(UNDEFINED_ERROR_RESOURCE_NAME), anyString(),
@@ -97,7 +119,10 @@ public class EapFailureNotifierTest extends WifiBaseTest {
@After
public void cleanUp() throws Exception {
- mStaticMockSession.finishMocking();
+ validateMockitoUsage();
+ if (mStaticMockSession != null) {
+ mStaticMockSession.finishMocking();
+ }
}
/**
@@ -120,6 +145,7 @@ public class EapFailureNotifierTest extends WifiBaseTest {
ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
verify(mFrameworkFacade).getActivity(
eq(mContext), eq(0), intent.capture(), eq(PendingIntent.FLAG_UPDATE_CURRENT));
+ assertEquals(TEST_SETTINGS_PACKAGE, intent.getValue().getPackage());
assertEquals(Settings.ACTION_WIFI_SETTINGS, intent.getValue().getAction());
}
@@ -146,6 +172,7 @@ public class EapFailureNotifierTest extends WifiBaseTest {
ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
verify(mFrameworkFacade).getActivity(
eq(mContext), eq(0), intent.capture(), eq(PendingIntent.FLAG_UPDATE_CURRENT));
+ assertEquals(TEST_SETTINGS_PACKAGE, intent.getValue().getPackage());
assertEquals(Settings.ACTION_WIFI_SETTINGS, intent.getValue().getAction());
}
diff --git a/tests/wifitests/src/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreDataTest.java b/tests/wifitests/src/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreDataTest.java
index ec2142dbf..77d5c1933 100644
--- a/tests/wifitests/src/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreDataTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/ImsiPrivacyProtectionExemptionStoreDataTest.java
@@ -17,6 +17,7 @@
package com.android.server.wifi;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -102,6 +103,17 @@ public class ImsiPrivacyProtectionExemptionStoreDataTest {
assertSerializeDeserialize(imsiPrivacyProtectionExemptionMap);
}
+ @Test
+ public void testDeserializeOnNewDeviceOrNewUser() throws Exception {
+ ArgumentCaptor<Map> deserializedNetworkSuggestionsMap =
+ ArgumentCaptor.forClass(Map.class);
+ mImsiPrivacyProtectionExemptionStoreData.deserializeData(null, 0,
+ WifiConfigStore.ENCRYPT_CREDENTIALS_CONFIG_STORE_DATA_VERSION, null);
+ verify(mDataSource).fromDeserialized(deserializedNetworkSuggestionsMap.capture());
+ assertTrue(deserializedNetworkSuggestionsMap.getValue().isEmpty());
+ }
+
+
private Map<Integer, Boolean> assertSerializeDeserialize(
Map<Integer, Boolean> mImsiPrivacyProtectionExemptionMap) throws Exception {
// Setup the data to serialize.
diff --git a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionNominatorTest.java b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionNominatorTest.java
index 9c5631882..1e0677316 100644
--- a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionNominatorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionNominatorTest.java
@@ -1046,6 +1046,7 @@ public class NetworkSuggestionNominatorTest extends WifiBaseTest {
ArgumentCaptor.forClass(WifiConfiguration.class);
verify(mWifiConfigManager, times(candidates.length)).addOrUpdateNetwork(
wifiConfigurationCaptor.capture(), anyInt(), anyString());
+ verify(mWifiConfigManager, times(candidates.length)).allowAutojoin(anyInt(), anyBoolean());
for (int i = 0; i < candidates.length; i++) {
WifiConfiguration addedWifiConfiguration = null;
for (WifiConfiguration configuration : wifiConfigurationCaptor.getAllValues()) {
diff --git a/tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java b/tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java
index b065f823c..cc96602d5 100644
--- a/tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/ScanRequestProxyTest.java
@@ -22,6 +22,8 @@ import static com.android.server.wifi.ScanRequestProxy.SCAN_REQUEST_THROTTLE_MAX
import static com.android.server.wifi.ScanRequestProxy.SCAN_REQUEST_THROTTLE_TIME_WINDOW_FG_APPS_MS;
import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_SCAN_THROTTLE_ENABLED;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@@ -1009,6 +1011,19 @@ public class ScanRequestProxyTest extends WifiBaseTest {
mLooper.dispatchAll();
validateScanResultsAvailableBroadcastSent(true);
verify(mScanResultsCallback, never()).onScanResultsAvailable();
+ }
+
+ /** Test that modifying the returned scan results list does not change the original. */
+ @Test
+ public void testGetScanResults_modifyReturnedList_doesNotChangeOriginal() {
+ // initialize scan results
+ testStartScanSuccess();
+
+ List<ScanResult> scanResults = mScanRequestProxy.getScanResults();
+ int scanResultsOriginalSize = scanResults.size();
+
+ scanResults.add(new ScanResult());
+ assertThat(mScanRequestProxy.getScanResults()).hasSize(scanResultsOriginalSize);
}
}
diff --git a/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java b/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java
index 95f88bbf1..7e0c20faf 100644
--- a/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java
@@ -1010,7 +1010,7 @@ public class SupplicantStaIfaceHalTest extends WifiBaseTest {
NativeUtil.decodeSsid(SUPPLICANT_SSID));
wifiMonitorInOrder.verify(mWifiMonitor).broadcastNetworkConnectionEvent(
- eq(WLAN0_IFACE_NAME), eq(frameworkNetworkId), eq(BSSID));
+ eq(WLAN0_IFACE_NAME), eq(frameworkNetworkId), eq(false), eq(BSSID));
wifiMonitorInOrder.verify(mWifiMonitor).broadcastSupplicantStateChangeEvent(
eq(WLAN0_IFACE_NAME), eq(frameworkNetworkId),
any(WifiSsid.class), eq(BSSID), eq(SupplicantState.COMPLETED));
@@ -1040,9 +1040,11 @@ public class SupplicantStaIfaceHalTest extends WifiBaseTest {
* Tests the handling of incorrect network passwords.
*/
@Test
- public void testAuthFailurePassword() throws Exception {
+ public void testAuthFailurePasswordOnDisconnect() throws Exception {
executeAndValidateInitializationSequence();
assertNotNull(mISupplicantStaIfaceCallback);
+ executeAndValidateConnectSequenceWithKeyMgmt(
+ 0, false, WifiConfiguration.KeyMgmt.WPA_PSK, null);
int reasonCode = 3;
mISupplicantStaIfaceCallback.onDisconnected(
@@ -1061,13 +1063,49 @@ public class SupplicantStaIfaceHalTest extends WifiBaseTest {
SUPPLICANT_NETWORK_ID,
NativeUtil.decodeSsid(SUPPLICANT_SSID));
mISupplicantStaIfaceCallback.onDisconnected(
+ NativeUtil.macAddressToByteArray(BSSID), false, reasonCode);
+
+ verify(mWifiMonitor).broadcastAuthenticationFailureEvent(
+ eq(WLAN0_IFACE_NAME), eq(WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD), eq(-1));
+ }
+
+ /**
+ * Tests the handling of EAP failure disconnects.
+ */
+ @Test
+ public void testAuthFailureEapOnDisconnect() throws Exception {
+ executeAndValidateInitializationSequence();
+ assertNotNull(mISupplicantStaIfaceCallback);
+ executeAndValidateConnectSequenceWithKeyMgmt(
+ 0, false, WifiConfiguration.KeyMgmt.WPA_EAP, null);
+
+ int reasonCode = 3;
+ mISupplicantStaIfaceCallback.onDisconnected(
NativeUtil.macAddressToByteArray(BSSID), true, reasonCode);
+ verify(mWifiMonitor, times(0))
+ .broadcastAuthenticationFailureEvent(any(), anyInt(), anyInt());
+
+ mISupplicantStaIfaceCallback.onDisconnected(
+ NativeUtil.macAddressToByteArray(BSSID), false, reasonCode);
+ verify(mWifiMonitor, times(0))
+ .broadcastAuthenticationFailureEvent(any(), anyInt(), anyInt());
+
+ mISupplicantStaIfaceCallback.onStateChanged(
+ ISupplicantStaIfaceCallback.State.ASSOCIATED,
+ NativeUtil.macAddressToByteArray(BSSID),
+ SUPPLICANT_NETWORK_ID,
+ NativeUtil.decodeSsid(SUPPLICANT_SSID));
+ // Ensure we don't lose our prev state with this state changed event.
+ mISupplicantStaIfaceCallback.onStateChanged(
+ ISupplicantStaIfaceCallback.State.DISCONNECTED,
+ NativeUtil.macAddressToByteArray(BSSID),
+ SUPPLICANT_NETWORK_ID,
+ NativeUtil.decodeSsid(SUPPLICANT_SSID));
mISupplicantStaIfaceCallback.onDisconnected(
NativeUtil.macAddressToByteArray(BSSID), false, reasonCode);
- verify(mWifiMonitor, times(2))
- .broadcastAuthenticationFailureEvent(eq(WLAN0_IFACE_NAME),
- eq(WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD), eq(-1));
+ verify(mWifiMonitor).broadcastAuthenticationFailureEvent(
+ eq(WLAN0_IFACE_NAME), eq(WifiManager.ERROR_AUTH_FAILURE_EAP_FAILURE), eq(-1));
}
/**
@@ -2786,7 +2824,7 @@ public class SupplicantStaIfaceHalTest extends WifiBaseTest {
NativeUtil.decodeSsid(SUPPLICANT_SSID), false);
wifiMonitorInOrder.verify(mWifiMonitor).broadcastNetworkConnectionEvent(
- eq(WLAN0_IFACE_NAME), eq(frameworkNetworkId), eq(BSSID));
+ eq(WLAN0_IFACE_NAME), eq(frameworkNetworkId), eq(false), eq(BSSID));
wifiMonitorInOrder.verify(mWifiMonitor).broadcastSupplicantStateChangeEvent(
eq(WLAN0_IFACE_NAME), eq(frameworkNetworkId),
any(WifiSsid.class), eq(BSSID), eq(SupplicantState.COMPLETED));
@@ -2866,8 +2904,8 @@ public class SupplicantStaIfaceHalTest extends WifiBaseTest {
NativeUtil.macAddressToByteArray(BSSID), SUPPLICANT_NETWORK_ID,
NativeUtil.decodeSsid(SUPPLICANT_SSID), true);
- wifiMonitorInOrder.verify(mWifiMonitor).broadcastFilsNetworkConnectionEvent(
- eq(WLAN0_IFACE_NAME), eq(frameworkNetworkId), eq(BSSID));
+ wifiMonitorInOrder.verify(mWifiMonitor).broadcastNetworkConnectionEvent(
+ eq(WLAN0_IFACE_NAME), eq(frameworkNetworkId), eq(true), eq(BSSID));
wifiMonitorInOrder.verify(mWifiMonitor).broadcastSupplicantStateChangeEvent(
eq(WLAN0_IFACE_NAME), eq(frameworkNetworkId),
any(WifiSsid.class), eq(BSSID), eq(SupplicantState.COMPLETED));
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoManagerTest.java
index 2c1c2ec91..750e8d46b 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoManagerTest.java
@@ -19,6 +19,7 @@ package com.android.server.wifi;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
import static com.android.server.wifi.WifiCarrierInfoManager.NOTIFICATION_USER_ALLOWED_CARRIER_INTENT_ACTION;
+import static com.android.server.wifi.WifiCarrierInfoManager.NOTIFICATION_USER_CLICKED_INTENT_ACTION;
import static com.android.server.wifi.WifiCarrierInfoManager.NOTIFICATION_USER_DISALLOWED_CARRIER_INTENT_ACTION;
import static com.android.server.wifi.WifiCarrierInfoManager.NOTIFICATION_USER_DISMISSED_INTENT_ACTION;
@@ -166,6 +167,7 @@ public class WifiCarrierInfoManagerTest extends WifiBaseTest {
when(mNotificationBuilder.setTicker(any())).thenReturn(mNotificationBuilder);
when(mNotificationBuilder.setContentTitle(any())).thenReturn(mNotificationBuilder);
when(mNotificationBuilder.setStyle(any())).thenReturn(mNotificationBuilder);
+ when(mNotificationBuilder.setContentIntent(any())).thenReturn(mNotificationBuilder);
when(mNotificationBuilder.setDeleteIntent(any())).thenReturn(mNotificationBuilder);
when(mNotificationBuilder.setShowWhen(anyBoolean())).thenReturn(mNotificationBuilder);
when(mNotificationBuilder.setLocalOnly(anyBoolean())).thenReturn(mNotificationBuilder);
@@ -1538,26 +1540,13 @@ public class WifiCarrierInfoManagerTest extends WifiBaseTest {
verify(mNotificationManger).cancel(SystemMessage.NOTE_NETWORK_SUGGESTION_AVAILABLE);
verify(mWifiMetrics).addUserApprovalCarrierUiReaction(
WifiCarrierInfoManager.ACTION_USER_ALLOWED_CARRIER, false);
- validateUserApprovalDialog(CARRIER_NAME);
-
- // Simulate user clicking on allow in the dialog.
- ArgumentCaptor<DialogInterface.OnClickListener> clickListenerCaptor =
- ArgumentCaptor.forClass(DialogInterface.OnClickListener.class);
- verify(mAlertDialogBuilder, atLeastOnce()).setPositiveButton(
- any(), clickListenerCaptor.capture());
- assertNotNull(clickListenerCaptor.getValue());
- clickListenerCaptor.getValue().onClick(mAlertDialog, 0);
- mLooper.dispatchAll();
- ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mContext).sendBroadcast(intentCaptor.capture());
- assertEquals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS, intentCaptor.getValue().getAction());
verify(mWifiConfigManager).saveToStore(true);
assertTrue(mImsiDataSource.hasNewDataToSerialize());
assertTrue(mWifiCarrierInfoManager
.hasUserApprovedImsiPrivacyExemptionForCarrier(DATA_CARRIER_ID));
verify(mListener).onUserAllowed(DATA_CARRIER_ID);
verify(mWifiMetrics).addUserApprovalCarrierUiReaction(
- WifiCarrierInfoManager.ACTION_USER_ALLOWED_CARRIER, true);
+ WifiCarrierInfoManager.ACTION_USER_ALLOWED_CARRIER, false);
}
@Test
@@ -1607,7 +1596,7 @@ public class WifiCarrierInfoManagerTest extends WifiBaseTest {
validateImsiProtectionNotification(CARRIER_NAME);
//Simulate user dismissal the notification
sendBroadcastForUserActionOnImsi(NOTIFICATION_USER_DISMISSED_INTENT_ACTION,
- CARRIER_NAME, DATA_SUBID);
+ CARRIER_NAME, DATA_CARRIER_ID);
verify(mWifiMetrics).addUserApprovalCarrierUiReaction(
WifiCarrierInfoManager.ACTION_USER_DISMISS, false);
reset(mNotificationManger);
@@ -1618,7 +1607,7 @@ public class WifiCarrierInfoManagerTest extends WifiBaseTest {
// As there is notification is active, should not send notification again.
sendBroadcastForUserActionOnImsi(NOTIFICATION_USER_DISMISSED_INTENT_ACTION,
- CARRIER_NAME, DATA_SUBID);
+ CARRIER_NAME, DATA_CARRIER_ID);
verifyNoMoreInteractions(mNotificationManger);
verify(mWifiConfigManager, never()).saveToStore(true);
assertFalse(mImsiDataSource.hasNewDataToSerialize());
@@ -1642,12 +1631,10 @@ public class WifiCarrierInfoManagerTest extends WifiBaseTest {
mWifiCarrierInfoManager.sendImsiProtectionExemptionNotificationIfRequired(DATA_CARRIER_ID);
validateImsiProtectionNotification(CARRIER_NAME);
- // Simulate user clicking on allow in the notification.
- sendBroadcastForUserActionOnImsi(NOTIFICATION_USER_ALLOWED_CARRIER_INTENT_ACTION,
- CARRIER_NAME, DATA_SUBID);
+ // Simulate user clicking on the notification.
+ sendBroadcastForUserActionOnImsi(NOTIFICATION_USER_CLICKED_INTENT_ACTION,
+ CARRIER_NAME, DATA_CARRIER_ID);
verify(mNotificationManger).cancel(SystemMessage.NOTE_NETWORK_SUGGESTION_AVAILABLE);
- verify(mWifiMetrics).addUserApprovalCarrierUiReaction(
- WifiCarrierInfoManager.ACTION_USER_ALLOWED_CARRIER, false);
validateUserApprovalDialog(CARRIER_NAME);
// Simulate user clicking on disallow in the dialog.
@@ -1685,11 +1672,10 @@ public class WifiCarrierInfoManagerTest extends WifiBaseTest {
mWifiCarrierInfoManager.sendImsiProtectionExemptionNotificationIfRequired(DATA_CARRIER_ID);
validateImsiProtectionNotification(CARRIER_NAME);
- sendBroadcastForUserActionOnImsi(NOTIFICATION_USER_ALLOWED_CARRIER_INTENT_ACTION,
- CARRIER_NAME, DATA_SUBID);
+ // Simulate user clicking on the notification.
+ sendBroadcastForUserActionOnImsi(NOTIFICATION_USER_CLICKED_INTENT_ACTION,
+ CARRIER_NAME, DATA_CARRIER_ID);
verify(mNotificationManger).cancel(SystemMessage.NOTE_NETWORK_SUGGESTION_AVAILABLE);
- verify(mWifiMetrics).addUserApprovalCarrierUiReaction(
- WifiCarrierInfoManager.ACTION_USER_ALLOWED_CARRIER, false);
validateUserApprovalDialog(CARRIER_NAME);
// Simulate user clicking on dismissal in the dialog.
@@ -1718,6 +1704,45 @@ public class WifiCarrierInfoManagerTest extends WifiBaseTest {
}
@Test
+ public void testSendImsiProtectionExemptionDialogWithUserAllowed() {
+ // Setup carrier without IMSI privacy protection
+ when(mCarrierConfigManager.getConfigForSubId(DATA_SUBID))
+ .thenReturn(generateTestCarrierConfig(false));
+ ArgumentCaptor<BroadcastReceiver> receiver =
+ ArgumentCaptor.forClass(BroadcastReceiver.class);
+ verify(mContext).registerReceiver(receiver.capture(), any(IntentFilter.class));
+
+ receiver.getValue().onReceive(mContext,
+ new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED));
+ assertFalse(mWifiCarrierInfoManager.requiresImsiEncryption(DATA_SUBID));
+
+ mWifiCarrierInfoManager.sendImsiProtectionExemptionNotificationIfRequired(DATA_CARRIER_ID);
+ validateImsiProtectionNotification(CARRIER_NAME);
+ // Simulate user clicking on the notification.
+ sendBroadcastForUserActionOnImsi(NOTIFICATION_USER_CLICKED_INTENT_ACTION,
+ CARRIER_NAME, DATA_CARRIER_ID);
+ verify(mNotificationManger).cancel(SystemMessage.NOTE_NETWORK_SUGGESTION_AVAILABLE);
+ validateUserApprovalDialog(CARRIER_NAME);
+
+ // Simulate user clicking on allow in the dialog.
+ ArgumentCaptor<DialogInterface.OnClickListener> clickListenerCaptor =
+ ArgumentCaptor.forClass(DialogInterface.OnClickListener.class);
+ verify(mAlertDialogBuilder, atLeastOnce()).setPositiveButton(
+ any(), clickListenerCaptor.capture());
+ assertNotNull(clickListenerCaptor.getValue());
+ clickListenerCaptor.getValue().onClick(mAlertDialog, 0);
+ mLooper.dispatchAll();
+ ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+ verify(mContext).sendBroadcast(intentCaptor.capture());
+ assertEquals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS, intentCaptor.getValue().getAction());
+ verify(mWifiConfigManager).saveToStore(true);
+ assertTrue(mImsiDataSource.hasNewDataToSerialize());
+ verify(mListener).onUserAllowed(DATA_CARRIER_ID);
+ verify(mWifiMetrics).addUserApprovalCarrierUiReaction(
+ WifiCarrierInfoManager.ACTION_USER_ALLOWED_CARRIER, true);
+ }
+
+ @Test
public void testUserDataStoreIsNotLoadedNotificationWillNotBeSent() {
// reset data source to unloaded state.
mImsiDataSource.reset();
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
index 9d96116eb..34567e969 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
@@ -622,7 +622,7 @@ public class WifiConfigManagerTest extends WifiBaseTest {
return (int) mBssidStatusMap.entrySet().stream()
.filter(e -> e.getValue().equals(ssid)).count();
}
- }).when(mBssidBlocklistMonitor).getNumBlockedBssidsForSsid(
+ }).when(mBssidBlocklistMonitor).updateAndGetNumBlockedBssidsForSsid(
anyString());
// add bssid to the blocklist
mBssidStatusMap.put(TEST_BSSID, openNetwork.SSID);
@@ -650,7 +650,8 @@ public class WifiConfigManagerTest extends WifiBaseTest {
assertTrue(oldConfig.trusted);
assertNull(oldConfig.BSSID);
- assertEquals(0, mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(openNetwork.SSID));
+ assertEquals(0, mBssidBlocklistMonitor.updateAndGetNumBlockedBssidsForSsid(
+ openNetwork.SSID));
}
/**
@@ -1376,7 +1377,7 @@ public class WifiConfigManagerTest extends WifiBaseTest {
for (int i = 1; i < MAX_BLOCKED_BSSID_PER_NETWORK + 1; i++) {
verifyDisableNetwork(result, disableReason);
int numBssidsInBlocklist = i;
- when(mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(anyString()))
+ when(mBssidBlocklistMonitor.updateAndGetNumBlockedBssidsForSsid(anyString()))
.thenReturn(numBssidsInBlocklist);
timeout = WifiConfigManager.getNetworkSelectionDisableTimeoutMillis(disableReason)
* multiplier;
@@ -1387,7 +1388,7 @@ public class WifiConfigManagerTest extends WifiBaseTest {
// Verify one last time that the disable duration is capped at some maximum.
verifyDisableNetwork(result, disableReason);
- when(mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(anyString()))
+ when(mBssidBlocklistMonitor.updateAndGetNumBlockedBssidsForSsid(anyString()))
.thenReturn(MAX_BLOCKED_BSSID_PER_NETWORK + 1);
verifyNetworkIsEnabledAfter(result.getNetworkId(),
TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS + timeout);
@@ -1405,7 +1406,7 @@ public class WifiConfigManagerTest extends WifiBaseTest {
// Verify that with 0 BSSIDs in blocklist we enable the network immediately
verifyDisableNetwork(result, disableReason);
- when(mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(anyString())).thenReturn(0);
+ when(mBssidBlocklistMonitor.updateAndGetNumBlockedBssidsForSsid(anyString())).thenReturn(0);
when(mClock.getElapsedSinceBootMillis())
.thenReturn(TEST_ELAPSED_UPDATE_NETWORK_SELECTION_TIME_MILLIS);
assertTrue(mWifiConfigManager.tryEnableNetwork(result.getNetworkId()));
@@ -2918,6 +2919,7 @@ public class WifiConfigManagerTest extends WifiBaseTest {
Set<Integer> removedNetworks = mWifiConfigManager.handleUserSwitch(user2);
verify(mWifiConfigStore).switchUserStoresAndRead(any(List.class));
assertTrue((removedNetworks.size() == 1) && (removedNetworks.contains(user1NetworkId)));
+ verify(mWcmListener).onNetworkRemoved(any());
// Set the expected networks to be |sharedNetwork| and |user2Network|.
List<WifiConfiguration> expectedNetworks = new ArrayList<WifiConfiguration>() {
@@ -2936,6 +2938,66 @@ public class WifiConfigManagerTest extends WifiBaseTest {
assertTrue(removedNetworks.isEmpty());
}
+ @Test
+ public void testHandleUserSwitchRemovesOldUserEphemeralNetworks() throws Exception {
+ int user1 = TEST_DEFAULT_USER;
+ int user2 = TEST_DEFAULT_USER + 1;
+ setupUserProfiles(user2);
+
+ int appId = 674;
+
+ // Create 2 networks. 1 ephemeral network for user1 and 1 shared.
+ final WifiConfiguration sharedNetwork = WifiConfigurationTestUtil.createPskNetwork();
+
+ // Set up the store data that is loaded initially.
+ List<WifiConfiguration> sharedNetworks = new ArrayList<WifiConfiguration>() {
+ {
+ add(sharedNetwork);
+ }
+ };
+ setupStoreDataForRead(sharedNetworks, Collections.EMPTY_LIST);
+ assertTrue(mWifiConfigManager.loadFromStore());
+ verify(mWifiConfigStore).read();
+
+ WifiConfiguration ephemeralNetwork = WifiConfigurationTestUtil.createEphemeralNetwork();
+ verifyAddEphemeralNetworkToWifiConfigManager(ephemeralNetwork);
+
+ // Fetch the network ID assigned to the user 1 network initially.
+ int ephemeralNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
+ List<WifiConfiguration> retrievedNetworks =
+ mWifiConfigManager.getConfiguredNetworksWithPasswords();
+ for (WifiConfiguration network : retrievedNetworks) {
+ if (network.getKey().equals(ephemeralNetwork.getKey())) {
+ ephemeralNetworkId = network.networkId;
+ }
+ }
+
+ // Now switch the user to user 2 and ensure that user 1's private network has been removed.
+ when(mUserManager.isUserUnlockingOrUnlocked(UserHandle.of(user2))).thenReturn(true);
+ Set<Integer> removedNetworks = mWifiConfigManager.handleUserSwitch(user2);
+ verify(mWifiConfigStore).switchUserStoresAndRead(any(List.class));
+ assertTrue((removedNetworks.size() == 1));
+ assertTrue(removedNetworks.contains(ephemeralNetworkId));
+ verifyNetworkRemoveBroadcast();
+ verify(mWcmListener).onNetworkRemoved(any());
+
+
+ // Set the expected networks to be |sharedNetwork|.
+ List<WifiConfiguration> expectedNetworks = new ArrayList<WifiConfiguration>() {
+ {
+ add(sharedNetwork);
+ }
+ };
+ WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate(
+ expectedNetworks, mWifiConfigManager.getConfiguredNetworksWithPasswords());
+
+ // Send another user switch indication with the same user 2. This should be ignored and
+ // hence should not remove any new networks.
+ when(mUserManager.isUserUnlockingOrUnlocked(UserHandle.of(user2))).thenReturn(true);
+ removedNetworks = mWifiConfigManager.handleUserSwitch(user2);
+ assertTrue(removedNetworks.isEmpty());
+ }
+
/**
* Verifies the foreground user switch using {@link WifiConfigManager#handleUserSwitch(int)}
* and ensures that user switch from a user with no private networks is handled.
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java
index 8d7f5c6e6..0dd5b1214 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java
@@ -16,6 +16,9 @@
package com.android.server.wifi;
+import static android.net.wifi.WifiEnterpriseConfig.OCSP_NONE;
+import static android.net.wifi.WifiEnterpriseConfig.OCSP_REQUIRE_CERT_STATUS;
+
import static org.junit.Assert.*;
import android.content.pm.UserInfo;
@@ -980,4 +983,82 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
return this;
}
}
+
+ /**
+ * Verify WifiEnterpriseConfig CA Certificate alias changes are detected.
+ */
+ @Test
+ public void testCaCertificateAliasChangesDetected() {
+ EnterpriseConfig eapConfig1 = new EnterpriseConfig(WifiEnterpriseConfig.Eap.TTLS)
+ .setPhase2(WifiEnterpriseConfig.Phase2.MSCHAPV2)
+ .setIdentity("username", "password");
+ eapConfig1.enterpriseConfig.setCaCertificateAlias("ALIAS_1");
+
+ EnterpriseConfig eapConfig2 = new EnterpriseConfig(WifiEnterpriseConfig.Eap.TTLS)
+ .setPhase2(WifiEnterpriseConfig.Phase2.MSCHAPV2)
+ .setIdentity("username", "password");
+ eapConfig2.enterpriseConfig.setCaCertificateAlias("ALIAS_2");
+
+ assertTrue(WifiConfigurationUtil.hasEnterpriseConfigChanged(eapConfig1.enterpriseConfig,
+ eapConfig2.enterpriseConfig));
+ }
+
+ /**
+ * Verify WifiEnterpriseConfig Client Certificate alias changes are detected.
+ */
+ @Test
+ public void testClientCertificateAliasChangesDetected() {
+ EnterpriseConfig eapConfig1 = new EnterpriseConfig(WifiEnterpriseConfig.Eap.TLS);
+ eapConfig1.enterpriseConfig.setCaCertificateAlias("ALIAS_1");
+ eapConfig1.enterpriseConfig.setClientCertificateAlias("CLIENT_ALIAS_1");
+
+ EnterpriseConfig eapConfig2 = new EnterpriseConfig(WifiEnterpriseConfig.Eap.TTLS);
+ eapConfig2.enterpriseConfig.setCaCertificateAlias("ALIAS_1");
+ eapConfig2.enterpriseConfig.setClientCertificateAlias("CLIENT_ALIAS_2");
+
+ assertTrue(WifiConfigurationUtil.hasEnterpriseConfigChanged(eapConfig1.enterpriseConfig,
+ eapConfig2.enterpriseConfig));
+ }
+
+ /**
+ * Verify WifiEnterpriseConfig OCSP changes are detected.
+ */
+ @Test
+ public void testOcspChangesDetected() {
+ EnterpriseConfig eapConfig1 = new EnterpriseConfig(WifiEnterpriseConfig.Eap.TTLS)
+ .setPhase2(WifiEnterpriseConfig.Phase2.MSCHAPV2)
+ .setIdentity("username", "password")
+ .setCaCerts(new X509Certificate[]{FakeKeys.CA_CERT0});
+ eapConfig1.enterpriseConfig.setOcsp(OCSP_NONE);
+
+ EnterpriseConfig eapConfig2 = new EnterpriseConfig(WifiEnterpriseConfig.Eap.TTLS)
+ .setPhase2(WifiEnterpriseConfig.Phase2.MSCHAPV2)
+ .setIdentity("username", "password")
+ .setCaCerts(new X509Certificate[]{FakeKeys.CA_CERT0});
+ eapConfig2.enterpriseConfig.setOcsp(OCSP_REQUIRE_CERT_STATUS);
+
+ assertTrue(WifiConfigurationUtil.hasEnterpriseConfigChanged(eapConfig1.enterpriseConfig,
+ eapConfig2.enterpriseConfig));
+ }
+
+ /**
+ * Verify WifiEnterpriseConfig subject match changes are detected.
+ */
+ @Test
+ public void testSubjectMatchChangesDetected() {
+ EnterpriseConfig eapConfig1 = new EnterpriseConfig(WifiEnterpriseConfig.Eap.TTLS)
+ .setPhase2(WifiEnterpriseConfig.Phase2.MSCHAPV2)
+ .setIdentity("username", "password")
+ .setCaCerts(new X509Certificate[]{FakeKeys.CA_CERT0});
+ eapConfig1.enterpriseConfig.setAltSubjectMatch("domain1.com");
+
+ EnterpriseConfig eapConfig2 = new EnterpriseConfig(WifiEnterpriseConfig.Eap.TTLS)
+ .setPhase2(WifiEnterpriseConfig.Phase2.MSCHAPV2)
+ .setIdentity("username", "password")
+ .setCaCerts(new X509Certificate[]{FakeKeys.CA_CERT0});
+ eapConfig1.enterpriseConfig.setAltSubjectMatch("domain2.com");
+
+ assertTrue(WifiConfigurationUtil.hasEnterpriseConfigChanged(eapConfig1.enterpriseConfig,
+ eapConfig2.enterpriseConfig));
+ }
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
index ba1c4f976..38d2e8275 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
@@ -893,7 +893,7 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
CANDIDATE_SSID);
// Verify the failed BSSID is added to blocklist
verify(mBssidBlocklistMonitor).blockBssidForDurationMs(eq(CANDIDATE_BSSID),
- eq(CANDIDATE_SSID), anyLong());
+ eq(CANDIDATE_SSID), anyLong(), anyInt(), anyInt());
// Verify another connection starting
verify(mWifiNS).selectNetwork((List<WifiCandidates.Candidate>)
argThat(new WifiCandidatesListSizeMatcher(1)));
@@ -2210,10 +2210,14 @@ public class WifiConnectivityManagerTest extends WifiBaseTest {
public void verifyBlacklistRefreshedAfterScanResults() {
when(mWifiConnectivityHelper.isFirmwareRoamingSupported()).thenReturn(true);
+ InOrder inOrder = inOrder(mBssidBlocklistMonitor);
// Force a connectivity scan
- verify(mBssidBlocklistMonitor, never()).updateAndGetBssidBlocklist();
+ inOrder.verify(mBssidBlocklistMonitor, never())
+ .updateAndGetBssidBlocklistForSsid(anyString());
mWifiConnectivityManager.forceConnectivityScan(WIFI_WORK_SOURCE);
- verify(mBssidBlocklistMonitor).updateAndGetBssidBlocklist();
+
+ inOrder.verify(mBssidBlocklistMonitor).tryEnablingBlockedBssids(any());
+ inOrder.verify(mBssidBlocklistMonitor).updateAndGetBssidBlocklistForSsid(anyString());
}
/**
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java b/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java
index 21a00f9a1..c679954b1 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java
@@ -28,6 +28,7 @@ import static org.mockito.Mockito.when;
import android.app.test.MockAnswerUtil.AnswerWithArguments;
import android.app.test.TestAlarmManager;
import android.content.Context;
+import android.content.pm.ModuleInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.MacAddress;
@@ -98,6 +99,8 @@ public class WifiHealthMonitorTest extends WifiBaseTest {
PackageManager mPackageManager;
@Mock
PackageInfo mPackageInfo;
+ @Mock
+ ModuleInfo mModuleInfo;
private final ArrayList<String> mKeys = new ArrayList<>();
private final ArrayList<WifiScoreCard.BlobListener> mBlobListeners = new ArrayList<>();
@@ -154,8 +157,9 @@ public class WifiHealthMonitorTest extends WifiBaseTest {
mDriverVersion = "build 1.1";
mFirmwareVersion = "HW 1.1";
when(mPackageInfo.getLongVersionCode()).thenReturn(MODULE_VERSION);
- when(mContext.getPackageName()).thenReturn("WifiAPK");
when(mPackageManager.getPackageInfo(anyString(), anyInt())).thenReturn(mPackageInfo);
+ when(mPackageManager.getModuleInfo(anyString(), anyInt())).thenReturn(mModuleInfo);
+ when(mModuleInfo.getPackageName()).thenReturn("WifiAPK");
when(mContext.getPackageManager()).thenReturn(mPackageManager);
mWifiConfigManager = mockConfigManager();
@@ -323,7 +327,7 @@ public class WifiHealthMonitorTest extends WifiBaseTest {
// trigger extractCurrentSoftwareBuildInfo() call to update currSoftwareBuildInfo
mWifiHealthMonitor.installMemoryStoreSetUpDetectionAlarm(mMemoryStore);
mWifiHealthMonitor.setWifiEnabled(true);
- assertEquals(0, mWifiHealthMonitor.getWifiStackVersion());
+ assertEquals(MODULE_VERSION, mWifiHealthMonitor.getWifiStackVersion());
millisecondsPass(5000);
mWifiScanner.startScan(mScanSettings, mScanListener);
mAlarmManager.dispatch(WifiHealthMonitor.POST_BOOT_DETECTION_TIMER_TAG);
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiKeyStoreTest.java b/tests/wifitests/src/com/android/server/wifi/WifiKeyStoreTest.java
index 8eef7e7d0..f6cae66db 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiKeyStoreTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiKeyStoreTest.java
@@ -16,6 +16,7 @@
package com.android.server.wifi;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.AdditionalMatchers.aryEq;
@@ -223,6 +224,8 @@ public class WifiKeyStoreTest extends WifiBaseTest {
*/
@Test
public void testConfigureSuiteBRsa3072() throws Exception {
+ when(mWifiEnterpriseConfig.getCaCertificateAliases())
+ .thenReturn(new String[]{USER_CA_CERT_ALIAS});
when(mWifiEnterpriseConfig.getClientPrivateKey())
.thenReturn(FakeKeys.CLIENT_SUITE_B_RSA3072_KEY);
when(mWifiEnterpriseConfig.getClientCertificate()).thenReturn(
@@ -249,6 +252,8 @@ public class WifiKeyStoreTest extends WifiBaseTest {
*/
@Test
public void testConfigureSuiteBEcdsa() throws Exception {
+ when(mWifiEnterpriseConfig.getCaCertificateAliases())
+ .thenReturn(new String[]{USER_CA_CERT_ALIAS});
when(mWifiEnterpriseConfig.getClientPrivateKey())
.thenReturn(FakeKeys.CLIENT_SUITE_B_ECC_KEY);
when(mWifiEnterpriseConfig.getClientCertificate()).thenReturn(
@@ -269,4 +274,119 @@ public class WifiKeyStoreTest extends WifiBaseTest {
assertTrue(
savedNetwork.allowedSuiteBCiphers.get(WifiConfiguration.SuiteBCipher.ECDHE_ECDSA));
}
+
+ /**
+ * Test configuring WPA3-Enterprise in 192-bit mode for RSA 3072 fails when CA and client
+ * certificates are not of the same type.
+ */
+ @Test
+ public void testConfigurationFailureSuiteB() throws Exception {
+ // Create a configuration with RSA client cert and ECDSA CA cert
+ when(mWifiEnterpriseConfig.getClientPrivateKey())
+ .thenReturn(FakeKeys.CLIENT_SUITE_B_RSA3072_KEY);
+ when(mWifiEnterpriseConfig.getClientCertificate()).thenReturn(
+ FakeKeys.CLIENT_SUITE_B_RSA3072_CERT);
+ when(mWifiEnterpriseConfig.getCaCertificate()).thenReturn(FakeKeys.CA_SUITE_B_ECDSA_CERT);
+ when(mWifiEnterpriseConfig.getClientCertificateChain())
+ .thenReturn(new X509Certificate[]{FakeKeys.CLIENT_SUITE_B_RSA3072_CERT});
+ when(mWifiEnterpriseConfig.getCaCertificates())
+ .thenReturn(new X509Certificate[]{FakeKeys.CA_SUITE_B_ECDSA_CERT});
+ when(mKeyStore.getCertificate(eq(USER_CERT_ALIAS))).thenReturn(
+ FakeKeys.CLIENT_SUITE_B_RSA3072_CERT);
+ when(mKeyStore.getCertificate(eq(USER_CA_CERT_ALIASES[0]))).thenReturn(
+ FakeKeys.CA_SUITE_B_ECDSA_CERT);
+ WifiConfiguration savedNetwork = WifiConfigurationTestUtil.createEapSuiteBNetwork(
+ WifiConfiguration.SuiteBCipher.ECDHE_ECDSA);
+ savedNetwork.enterpriseConfig = mWifiEnterpriseConfig;
+ assertFalse(mWifiKeyStore.updateNetworkKeys(savedNetwork, null));
+ }
+
+ /**
+ * Test configuring WPA3-Enterprise in 192-bit mode for RSA 3072 fails when CA is RSA but not
+ * with the required security
+ */
+ @Test
+ public void testConfigurationFailureSuiteBNon3072Rsa() throws Exception {
+ // Create a configuration with RSA client cert and weak RSA CA cert
+ when(mWifiEnterpriseConfig.getClientPrivateKey())
+ .thenReturn(FakeKeys.CLIENT_SUITE_B_RSA3072_KEY);
+ when(mWifiEnterpriseConfig.getClientCertificate()).thenReturn(
+ FakeKeys.CLIENT_SUITE_B_RSA3072_CERT);
+ when(mWifiEnterpriseConfig.getCaCertificate()).thenReturn(FakeKeys.CA_CERT0);
+ when(mWifiEnterpriseConfig.getClientCertificateChain())
+ .thenReturn(new X509Certificate[]{FakeKeys.CLIENT_SUITE_B_RSA3072_CERT});
+ when(mWifiEnterpriseConfig.getCaCertificates())
+ .thenReturn(new X509Certificate[]{FakeKeys.CA_CERT0});
+ when(mKeyStore.getCertificate(eq(USER_CERT_ALIAS))).thenReturn(
+ FakeKeys.CLIENT_SUITE_B_RSA3072_CERT);
+ when(mKeyStore.getCertificate(eq(USER_CA_CERT_ALIASES[0]))).thenReturn(
+ FakeKeys.CA_CERT0);
+ WifiConfiguration savedNetwork = WifiConfigurationTestUtil.createEapSuiteBNetwork(
+ WifiConfiguration.SuiteBCipher.ECDHE_RSA);
+ savedNetwork.enterpriseConfig = mWifiEnterpriseConfig;
+ assertFalse(mWifiKeyStore.updateNetworkKeys(savedNetwork, null));
+ }
+
+ /**
+ * Test configuring WPA3-Enterprise in 192-bit mode for RSA 3072 fails when one CA in the list
+ * is RSA but not with the required security
+ */
+ @Test
+ public void testConfigurationFailureSuiteBNon3072RsaInList() throws Exception {
+ // Create a configuration with RSA client cert and weak RSA CA cert
+ when(mWifiEnterpriseConfig.getClientPrivateKey())
+ .thenReturn(FakeKeys.CLIENT_SUITE_B_RSA3072_KEY);
+ when(mWifiEnterpriseConfig.getClientCertificate()).thenReturn(
+ FakeKeys.CLIENT_SUITE_B_RSA3072_CERT);
+ when(mWifiEnterpriseConfig.getCaCertificate()).thenReturn(FakeKeys.CA_SUITE_B_RSA3072_CERT);
+ when(mWifiEnterpriseConfig.getClientCertificateChain())
+ .thenReturn(new X509Certificate[]{FakeKeys.CLIENT_SUITE_B_RSA3072_CERT});
+ when(mWifiEnterpriseConfig.getCaCertificates())
+ .thenReturn(
+ new X509Certificate[]{FakeKeys.CA_SUITE_B_RSA3072_CERT, FakeKeys.CA_CERT0});
+ when(mKeyStore.getCertificate(eq(USER_CERT_ALIAS))).thenReturn(
+ FakeKeys.CLIENT_SUITE_B_RSA3072_CERT);
+ when(mKeyStore.getCertificate(eq(USER_CA_CERT_ALIASES[0]))).thenReturn(
+ FakeKeys.CA_SUITE_B_RSA3072_CERT);
+ when(mKeyStore.getCertificate(eq(USER_CA_CERT_ALIASES[1]))).thenReturn(
+ FakeKeys.CA_CERT0);
+ when(mWifiEnterpriseConfig.getCaCertificateAliases())
+ .thenReturn(USER_CA_CERT_ALIASES);
+ WifiConfiguration savedNetwork = WifiConfigurationTestUtil.createEapSuiteBNetwork(
+ WifiConfiguration.SuiteBCipher.ECDHE_RSA);
+ savedNetwork.enterpriseConfig = mWifiEnterpriseConfig;
+ assertFalse(mWifiKeyStore.updateNetworkKeys(savedNetwork, null));
+ }
+
+ /**
+ * Test configuring WPA3-Enterprise in 192-bit mode for RSA 3072 fails when one CA in the list
+ * is RSA and the other is ECDSA
+ */
+ @Test
+ public void testConfigurationFailureSuiteBRsaAndEcdsaInList() throws Exception {
+ // Create a configuration with RSA client cert and weak RSA CA cert
+ when(mWifiEnterpriseConfig.getClientPrivateKey())
+ .thenReturn(FakeKeys.CLIENT_SUITE_B_RSA3072_KEY);
+ when(mWifiEnterpriseConfig.getClientCertificate()).thenReturn(
+ FakeKeys.CLIENT_SUITE_B_RSA3072_CERT);
+ when(mWifiEnterpriseConfig.getCaCertificate()).thenReturn(FakeKeys.CA_SUITE_B_RSA3072_CERT);
+ when(mWifiEnterpriseConfig.getClientCertificateChain())
+ .thenReturn(new X509Certificate[]{FakeKeys.CLIENT_SUITE_B_RSA3072_CERT});
+ when(mWifiEnterpriseConfig.getCaCertificates())
+ .thenReturn(
+ new X509Certificate[]{FakeKeys.CA_SUITE_B_RSA3072_CERT,
+ FakeKeys.CA_SUITE_B_ECDSA_CERT});
+ when(mKeyStore.getCertificate(eq(USER_CERT_ALIAS))).thenReturn(
+ FakeKeys.CLIENT_SUITE_B_RSA3072_CERT);
+ when(mKeyStore.getCertificate(eq(USER_CA_CERT_ALIASES[0]))).thenReturn(
+ FakeKeys.CA_SUITE_B_RSA3072_CERT);
+ when(mKeyStore.getCertificate(eq(USER_CA_CERT_ALIASES[1]))).thenReturn(
+ FakeKeys.CA_SUITE_B_ECDSA_CERT);
+ when(mWifiEnterpriseConfig.getCaCertificateAliases())
+ .thenReturn(USER_CA_CERT_ALIASES);
+ WifiConfiguration savedNetwork = WifiConfigurationTestUtil.createEapSuiteBNetwork(
+ WifiConfiguration.SuiteBCipher.ECDHE_RSA);
+ savedNetwork.enterpriseConfig = mWifiEnterpriseConfig;
+ assertFalse(mWifiKeyStore.updateNetworkKeys(savedNetwork, null));
+ }
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java b/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
index 4e895e488..b69b30208 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
@@ -60,6 +60,7 @@ import android.net.wifi.SoftApCapability;
import android.net.wifi.SoftApConfiguration;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiConfiguration.NetworkSelectionStatus;
import android.net.wifi.WifiEnterpriseConfig;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
@@ -98,6 +99,7 @@ import com.android.server.wifi.proto.nano.WifiMetricsProto.Int32Count;
import com.android.server.wifi.proto.nano.WifiMetricsProto.LinkProbeStats;
import com.android.server.wifi.proto.nano.WifiMetricsProto.LinkProbeStats.ExperimentProbeCounts;
import com.android.server.wifi.proto.nano.WifiMetricsProto.LinkProbeStats.LinkProbeFailureReasonCount;
+import com.android.server.wifi.proto.nano.WifiMetricsProto.NetworkDisableReason;
import com.android.server.wifi.proto.nano.WifiMetricsProto.NetworkSelectionExperimentDecisions;
import com.android.server.wifi.proto.nano.WifiMetricsProto.PasspointProfileTypeCount;
import com.android.server.wifi.proto.nano.WifiMetricsProto.PasspointProvisionStats;
@@ -129,9 +131,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
+import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -586,9 +590,9 @@ public class WifiMetricsTest extends WifiBaseTest {
mockScanDetails.add(buildMockScanDetail(false, null, "[WAPI-WAPI-CERT-SMS4-SMS4]", 0));
// Number of scans of R2 networks must be equal to NUM_HOTSPOT2_R2_NETWORK_SCAN_RESULTS
mockScanDetails.add(buildMockScanDetail(false, NetworkDetail.HSRelease.R2,
- "[WPA-EAP-CCMP+FILS-SHA256-CCMP]", FEATURE_MBO | FEATURE_OCE));
+ "[WPA-EAP-CCMP+EAP-FILS-SHA256-CCMP]", FEATURE_MBO | FEATURE_OCE));
mockScanDetails.add(buildMockScanDetail(false, NetworkDetail.HSRelease.R2,
- "[WPA2-EAP+FT/EAP-CCMP+FILS-SHA256-CCMP]", 0));
+ "[WPA2-EAP+FT/EAP-CCMP+EAP-FILS-SHA256-CCMP]", 0));
// Number of scans of R1 networks must be equal to NUM_HOTSPOT2_R1_NETWORK_SCAN_RESULTS
mockScanDetails.add(buildMockScanDetail(false, NetworkDetail.HSRelease.R1,
"[WPA-EAP-CCMP]", 0));
@@ -1727,7 +1731,8 @@ public class WifiMetricsTest extends WifiBaseTest {
config.allowedKeyManagement = new BitSet();
when(config.getNetworkSelectionStatus()).thenReturn(
mock(WifiConfiguration.NetworkSelectionStatus.class));
- when(mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(eq(config.SSID))).thenReturn(3);
+ when(mBssidBlocklistMonitor.updateAndGetNumBlockedBssidsForSsid(eq(config.SSID)))
+ .thenReturn(3);
mWifiMetrics.startConnectionEvent(config, "RED",
WifiMetricsProto.ConnectionEvent.ROAM_NONE);
mWifiMetrics.endConnectionEvent(
@@ -2297,6 +2302,7 @@ public class WifiMetricsTest extends WifiBaseTest {
mTestLooper.dispatchAll();
wifiMetrics.setScreenState(true);
when(mWifiDataStall.isCellularDataAvailable()).thenReturn(true);
+ wifiMetrics.setAdaptiveConnectivityState(true);
for (int i = 0; i < mTestStaLogInts.length; i++) {
int[] lia = mTestStaLogInts[i];
wifiMetrics.logStaEvent(lia[0], lia[1], lia[2] == 1 ? mTestWifiConfig : null);
@@ -2337,6 +2343,7 @@ public class WifiMetricsTest extends WifiBaseTest {
evs[7] == 1 ? mTestWifiConfig : null, event.configInfo);
assertEquals(true, event.screenOn);
assertEquals(true, event.isCellularDataAvailable);
+ assertEquals(true, event.isAdaptiveConnectivityEnabled);
j++;
}
assertEquals(mExpectedValues.length, j);
@@ -2398,9 +2405,8 @@ public class WifiMetricsTest extends WifiBaseTest {
int testNetworkId = 0;
long testStartTimeMillis = 123123L;
when(mClock.getElapsedSinceBootMillis()).thenReturn(testStartTimeMillis);
- WifiConfiguration config = mock(WifiConfiguration.class);
- when(config.isEphemeral()).thenReturn(true);
- when(config.isPasspoint()).thenReturn(true);
+ WifiConfiguration config = WifiConfigurationTestUtil.createPasspointNetwork();
+ config.ephemeral = true;
when(mWcm.getConfiguredNetwork(testNetworkId)).thenReturn(config);
mWifiMetrics.logUserActionEvent(testEventType, testNetworkId);
@@ -2413,6 +2419,118 @@ public class WifiMetricsTest extends WifiBaseTest {
assertEquals(testStartTimeMillis, userActionEvents[0].startTimeMillis);
assertEquals(true, userActionEvents[0].targetNetworkInfo.isEphemeral);
assertEquals(true, userActionEvents[0].targetNetworkInfo.isPasspoint);
+
+ // Verify that there are no disabled WifiConfiguration and BSSIDs
+ NetworkDisableReason networkDisableReason = userActionEvents[0].networkDisableReason;
+ assertEquals(NetworkDisableReason.REASON_UNKNOWN, networkDisableReason.disableReason);
+ assertEquals(false, networkDisableReason.configTemporarilyDisabled);
+ assertEquals(false, networkDisableReason.configPermanentlyDisabled);
+ assertEquals(0, networkDisableReason.bssidDisableReasons.length);
+ }
+
+ /**
+ * Verify the WifiStatus field in a UserActionEvent is populated correctly.
+ * @throws Exception
+ */
+ @Test
+ public void testLogWifiStatusInUserActionEvent() throws Exception {
+ // setups WifiStatus for information
+ int expectedRssi = -55;
+ int testNetworkId = 1;
+ int expectedTx = 1234;
+ int expectedRx = 2345;
+
+ WifiInfo wifiInfo = mock(WifiInfo.class);
+ when(wifiInfo.getRssi()).thenReturn(expectedRssi);
+ when(wifiInfo.getNetworkId()).thenReturn(testNetworkId);
+ mWifiMetrics.handlePollResult(wifiInfo);
+ mWifiMetrics.incrementThroughputKbpsCount(expectedTx, expectedRx, RSSI_POLL_FREQUENCY);
+ mWifiMetrics.setNominatorForNetwork(testNetworkId,
+ WifiMetricsProto.ConnectionEvent.NOMINATOR_SAVED_USER_CONNECT_CHOICE);
+
+ // generate a user action event and then verify fields
+ int testEventType = WifiMetricsProto.UserActionEvent.EVENT_FORGET_WIFI;
+ mWifiMetrics.logUserActionEvent(testEventType, testNetworkId);
+ dumpProtoAndDeserialize();
+
+ WifiMetricsProto.UserActionEvent[] userActionEvents = mDecodedProto.userActionEvents;
+ assertEquals(1, userActionEvents.length);
+ assertEquals(WifiMetricsProto.UserActionEvent.EVENT_FORGET_WIFI,
+ userActionEvents[0].eventType);
+ assertEquals(expectedRssi, userActionEvents[0].wifiStatus.lastRssi);
+ assertEquals(expectedTx, userActionEvents[0].wifiStatus.estimatedTxKbps);
+ assertEquals(expectedRx, userActionEvents[0].wifiStatus.estimatedRxKbps);
+ assertTrue(userActionEvents[0].wifiStatus.isStuckDueToUserConnectChoice);
+ }
+
+ /**
+ * verify NetworkDisableReason is populated properly when there exists a disabled
+ * WifiConfiguration and BSSID.
+ */
+ @Test
+ public void testNetworkDisableReasonInUserActionEvent() throws Exception {
+ // Setup a temporarily blocked config due to DISABLED_ASSOCIATION_REJECTION
+ WifiConfiguration testConfig = WifiConfigurationTestUtil.createOpenNetwork();
+ NetworkSelectionStatus status = testConfig.getNetworkSelectionStatus();
+ status.setNetworkSelectionStatus(
+ NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED);
+ status.setNetworkSelectionDisableReason(
+ NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION);
+ when(mWcm.getConfiguredNetwork(TEST_NETWORK_ID)).thenReturn(testConfig);
+
+ // Also setup the same BSSID level failure
+ Set<Integer> testBssidBlocklistReasons = new HashSet<>();
+ testBssidBlocklistReasons.add(BssidBlocklistMonitor.REASON_ASSOCIATION_REJECTION);
+ when(mBssidBlocklistMonitor.getFailureReasonsForSsid(anyString()))
+ .thenReturn(testBssidBlocklistReasons);
+
+ // Logging the user action event
+ mWifiMetrics.logUserActionEvent(WifiMetricsProto.UserActionEvent.EVENT_FORGET_WIFI,
+ TEST_NETWORK_ID);
+ dumpProtoAndDeserialize();
+
+ WifiMetricsProto.UserActionEvent[] userActionEvents = mDecodedProto.userActionEvents;
+ assertEquals(1, userActionEvents.length);
+ assertEquals(WifiMetricsProto.UserActionEvent.EVENT_FORGET_WIFI,
+ userActionEvents[0].eventType);
+ NetworkDisableReason networkDisableReason = userActionEvents[0].networkDisableReason;
+ assertEquals(NetworkDisableReason.REASON_ASSOCIATION_REJECTION,
+ networkDisableReason.disableReason);
+ assertEquals(true, networkDisableReason.configTemporarilyDisabled);
+ assertEquals(false, networkDisableReason.configPermanentlyDisabled);
+ assertEquals(1, networkDisableReason.bssidDisableReasons.length);
+ assertEquals(NetworkDisableReason.REASON_ASSOCIATION_REJECTION,
+ networkDisableReason.bssidDisableReasons[0]);
+ }
+
+ /**
+ * verify that auto-join disable overrides any other disable reasons in NetworkDisableReason.
+ */
+ @Test
+ public void testNetworkDisableReasonDisableAutojoinInUserActionEvent() throws Exception {
+ // Setup a temporarily blocked config due to DISABLED_ASSOCIATION_REJECTION
+ WifiConfiguration testConfig = WifiConfigurationTestUtil.createOpenNetwork();
+ NetworkSelectionStatus status = testConfig.getNetworkSelectionStatus();
+ status.setNetworkSelectionStatus(
+ NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED);
+ status.setNetworkSelectionDisableReason(
+ NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION);
+ when(mWcm.getConfiguredNetwork(TEST_NETWORK_ID)).thenReturn(testConfig);
+
+ // Disable autojoin
+ testConfig.allowAutojoin = false;
+
+ // Logging the user action event
+ mWifiMetrics.logUserActionEvent(WifiMetricsProto.UserActionEvent.EVENT_FORGET_WIFI,
+ TEST_NETWORK_ID);
+ dumpProtoAndDeserialize();
+
+ WifiMetricsProto.UserActionEvent[] userActionEvents = mDecodedProto.userActionEvents;
+ NetworkDisableReason networkDisableReason = userActionEvents[0].networkDisableReason;
+ assertEquals(NetworkDisableReason.REASON_AUTO_JOIN_DISABLED,
+ networkDisableReason.disableReason);
+ assertEquals(false, networkDisableReason.configTemporarilyDisabled);
+ assertEquals(true, networkDisableReason.configPermanentlyDisabled);
}
/**
@@ -2438,6 +2556,35 @@ public class WifiMetricsTest extends WifiBaseTest {
}
/**
+ * Test the logging of UserActionEvent for Adaptive Connectivity toggle
+ */
+ @Test
+ public void testLogUserActionEventForAdaptiveConnectivity() throws Exception {
+ long testStartTimeMillis = 123123L;
+ boolean adaptiveConnectivityEnabled = true;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(testStartTimeMillis);
+ mWifiMetrics.logUserActionEvent(
+ mWifiMetrics.convertAdaptiveConnectivityStateToUserActionEventType(
+ adaptiveConnectivityEnabled));
+ long testStartTimeMillis2 = 200000L;
+ boolean adaptiveConnectivityEnabled2 = false;
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(testStartTimeMillis2);
+ mWifiMetrics.logUserActionEvent(
+ mWifiMetrics.convertAdaptiveConnectivityStateToUserActionEventType(
+ adaptiveConnectivityEnabled2));
+ dumpProtoAndDeserialize();
+
+ WifiMetricsProto.UserActionEvent[] userActionEvents = mDecodedProto.userActionEvents;
+ assertEquals(2, userActionEvents.length);
+ assertEquals(WifiMetricsProto.UserActionEvent.EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_ON,
+ userActionEvents[0].eventType);
+ assertEquals(testStartTimeMillis, userActionEvents[0].startTimeMillis);
+ assertEquals(WifiMetricsProto.UserActionEvent.EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_OFF,
+ userActionEvents[1].eventType);
+ assertEquals(testStartTimeMillis2, userActionEvents[1].startTimeMillis);
+ }
+
+ /**
* Verify that the max length of the UserActionEvent list is limited to MAX_USER_ACTION_EVENTS.
*/
@Test
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java b/tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java
index 24bb968a5..c4acd73c2 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java
@@ -423,13 +423,14 @@ public class WifiMonitorTest extends WifiBaseTest {
WLAN_IFACE_NAME, WifiMonitor.NETWORK_CONNECTION_EVENT, mHandlerSpy);
int networkId = NETWORK_ID;
String bssid = BSSID;
- mWifiMonitor.broadcastNetworkConnectionEvent(WLAN_IFACE_NAME, networkId, bssid);
+ mWifiMonitor.broadcastNetworkConnectionEvent(WLAN_IFACE_NAME, networkId, false, bssid);
mLooper.dispatchAll();
ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
verify(mHandlerSpy).handleMessage(messageCaptor.capture());
assertEquals(WifiMonitor.NETWORK_CONNECTION_EVENT, messageCaptor.getValue().what);
assertEquals(networkId, messageCaptor.getValue().arg1);
+ assertEquals(0, messageCaptor.getValue().arg2);
assertEquals(bssid, (String) messageCaptor.getValue().obj);
}
@@ -607,17 +608,17 @@ public class WifiMonitorTest extends WifiBaseTest {
@Test
public void testBroadcastFilsNetworkConnectionEvent() {
mWifiMonitor.registerHandler(
- WLAN_IFACE_NAME, WifiMonitor.FILS_NETWORK_CONNECTION_EVENT, mHandlerSpy);
+ WLAN_IFACE_NAME, WifiMonitor.NETWORK_CONNECTION_EVENT, mHandlerSpy);
int networkId = NETWORK_ID;
String bssid = BSSID;
- mWifiMonitor.broadcastFilsNetworkConnectionEvent(WLAN_IFACE_NAME, networkId, bssid);
+ mWifiMonitor.broadcastNetworkConnectionEvent(WLAN_IFACE_NAME, networkId, true, bssid);
mLooper.dispatchAll();
ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
verify(mHandlerSpy).handleMessage(messageCaptor.capture());
- assertEquals(WifiMonitor.FILS_NETWORK_CONNECTION_EVENT, messageCaptor.getValue().what);
+ assertEquals(WifiMonitor.NETWORK_CONNECTION_EVENT, messageCaptor.getValue().what);
assertEquals(networkId, messageCaptor.getValue().arg1);
+ assertEquals(1, messageCaptor.getValue().arg2);
assertEquals(bssid, (String) messageCaptor.getValue().obj);
}
-
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
index 5f9e0333e..f6621a698 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
@@ -52,6 +52,7 @@ import android.net.wifi.WifiNetworkSpecifier;
import android.net.wifi.WifiScanner;
import android.net.wifi.WifiScanner.ScanListener;
import android.net.wifi.WifiScanner.ScanSettings;
+import android.net.wifi.WifiSsid;
import android.os.Binder;
import android.os.IBinder;
import android.os.Message;
@@ -1122,9 +1123,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
verify(mWifiMetrics).setNominatorForNetwork(anyInt(),
eq(WifiMetricsProto.ConnectionEvent.NOMINATOR_SPECIFIER));
- verify(mClientModeImpl).disconnectCommand();
- verify(mClientModeImpl).connect(eq(null), eq(TEST_NETWORK_ID_1), any(Binder.class),
- mConnectListenerArgumentCaptor.capture(), anyInt(), anyInt());
+
}
/**
@@ -1333,6 +1332,134 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
}
/**
+ * Verify handling of user selection to trigger connection to a network when the selected bssid
+ * is no longer seen in scan results within the cache expiry duration. Ensure we fill up the
+ * BSSID field.
+ */
+ @Test
+ public void
+ testNetworkSpecifierHandleUserSelectionConnectToNetworkMissingBssidInLatest()
+ throws Exception {
+ WifiScanner.ScanData[] scanDatas1 =
+ ScanTestUtil.createScanDatas(new int[][]{ { 2417, 2427, 5180, 5170 }});
+ setupScanData(scanDatas1, SCAN_RESULT_TYPE_WPA_PSK,
+ TEST_SSID_1, TEST_SSID_2, TEST_SSID_3, TEST_SSID_4);
+ // Modify the next set of scan results to simulate missing |TEST_SSID_1| ScanResult.
+ WifiScanner.ScanData[] scanDatas2 =
+ ScanTestUtil.createScanDatas(new int[][]{ { 2417, 2427, 5180, 5170 }});
+ setupScanData(scanDatas2, SCAN_RESULT_TYPE_WPA_PSK,
+ TEST_SSID_2, TEST_SSID_2, TEST_SSID_3, TEST_SSID_4);
+
+ // Make a specific AP request.
+ ScanResult matchingScanResult = scanDatas1[0].getResults()[0];
+ PatternMatcher ssidPatternMatch =
+ new PatternMatcher(TEST_SSID_1, PatternMatcher.PATTERN_LITERAL);
+ Pair<MacAddress, MacAddress> bssidPatternMatch =
+ Pair.create(MacAddress.fromString(matchingScanResult.BSSID),
+ MacAddress.BROADCAST_ADDRESS);
+ WifiConfiguration wifiConfiguration = new WifiConfiguration();
+ wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
+ wifiConfiguration.preSharedKey = TEST_WPA_PRESHARED_KEY;
+ attachWifiNetworkSpecifierAndAppInfo(
+ ssidPatternMatch, bssidPatternMatch, wifiConfiguration, TEST_UID_1,
+ TEST_PACKAGE_NAME_1);
+ mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
+ mWifiNetworkFactory.addCallback(mAppBinder, mNetworkRequestMatchCallback,
+ TEST_CALLBACK_IDENTIFIER);
+ verify(mNetworkRequestMatchCallback).onUserSelectionCallbackRegistration(
+ mNetworkRequestUserSelectionCallback.capture());
+ verifyPeriodicScans(
+ 0L,
+ new PeriodicScanParams(0, scanDatas1),
+ new PeriodicScanParams(PERIODIC_SCAN_INTERVAL_MS, scanDatas2));
+
+ // Now trigger user selection to the network.
+ mSelectedNetwork = ScanResultUtil.createNetworkFromScanResult(matchingScanResult);
+ mSelectedNetwork.SSID = "\"" + matchingScanResult.SSID + "\"";
+ INetworkRequestUserSelectionCallback networkRequestUserSelectionCallback =
+ mNetworkRequestUserSelectionCallback.getValue();
+ assertNotNull(networkRequestUserSelectionCallback);
+ sendUserSelectionSelect(networkRequestUserSelectionCallback, mSelectedNetwork);
+ mLooper.dispatchAll();
+
+ // Verify WifiConfiguration params.
+ validateConnectParams(mSelectedNetwork.SSID, matchingScanResult.BSSID);
+ verify(mWifiMetrics).setNominatorForNetwork(anyInt(),
+ eq(WifiMetricsProto.ConnectionEvent.NOMINATOR_SPECIFIER));
+
+ verify(mClientModeImpl).disconnectCommand();
+ verify(mClientModeImpl).connect(eq(null), eq(TEST_NETWORK_ID_1), any(Binder.class),
+ mConnectListenerArgumentCaptor.capture(), anyInt(), anyInt());
+ }
+
+ /**
+ * Verify handling of user selection to trigger connection to a network when the selected bssid
+ * is no longer seen in scan results beyond the cache expiry duration. Ensure we don't fill up
+ * the BSSID field.
+ */
+ @Test
+ public void
+ testNetworkSpecifierHandleUserSelectionConnectToNetworkStaleMissingBssidInLatest()
+ throws Exception {
+ WifiScanner.ScanData[] scanDatas1 =
+ ScanTestUtil.createScanDatas(new int[][]{ { 2417, 2427, 5180, 5170 }});
+ setupScanData(scanDatas1, SCAN_RESULT_TYPE_WPA_PSK,
+ TEST_SSID_1, TEST_SSID_2, TEST_SSID_3, TEST_SSID_4);
+ // Modify the next set of scan results to simulate missing |TEST_SSID_1| ScanResult.
+ WifiScanner.ScanData[] scanDatas2 =
+ ScanTestUtil.createScanDatas(new int[][]{ { 2417, 2427, 5180, 5170 }});
+ setupScanData(scanDatas2, SCAN_RESULT_TYPE_WPA_PSK,
+ TEST_SSID_2, TEST_SSID_2, TEST_SSID_3, TEST_SSID_4);
+
+ // Make a specific AP request.
+ ScanResult matchingScanResult = scanDatas1[0].getResults()[0];
+ PatternMatcher ssidPatternMatch =
+ new PatternMatcher(TEST_SSID_1, PatternMatcher.PATTERN_LITERAL);
+ Pair<MacAddress, MacAddress> bssidPatternMatch =
+ Pair.create(MacAddress.fromString(matchingScanResult.BSSID),
+ MacAddress.BROADCAST_ADDRESS);
+ WifiConfiguration wifiConfiguration = new WifiConfiguration();
+ wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
+ wifiConfiguration.preSharedKey = TEST_WPA_PRESHARED_KEY;
+ attachWifiNetworkSpecifierAndAppInfo(
+ ssidPatternMatch, bssidPatternMatch, wifiConfiguration, TEST_UID_1,
+ TEST_PACKAGE_NAME_1);
+ mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
+ mWifiNetworkFactory.addCallback(mAppBinder, mNetworkRequestMatchCallback,
+ TEST_CALLBACK_IDENTIFIER);
+ verify(mNetworkRequestMatchCallback).onUserSelectionCallbackRegistration(
+ mNetworkRequestUserSelectionCallback.capture());
+
+ long nowMs = WifiNetworkFactory.CACHED_SCAN_RESULTS_MAX_AGE_IN_MILLIS + 1;
+ scanDatas2[0].getResults()[0].timestamp = nowMs;
+ scanDatas2[0].getResults()[1].timestamp = nowMs;
+ scanDatas2[0].getResults()[2].timestamp = nowMs;
+ scanDatas2[0].getResults()[3].timestamp = nowMs;
+ verifyPeriodicScans(
+ nowMs,
+ new PeriodicScanParams(0, scanDatas1),
+ new PeriodicScanParams(PERIODIC_SCAN_INTERVAL_MS, scanDatas2));
+
+ // Now trigger user selection to the network.
+ mSelectedNetwork = ScanResultUtil.createNetworkFromScanResult(matchingScanResult);
+ mSelectedNetwork.SSID = "\"" + matchingScanResult.SSID + "\"";
+ INetworkRequestUserSelectionCallback networkRequestUserSelectionCallback =
+ mNetworkRequestUserSelectionCallback.getValue();
+ assertNotNull(networkRequestUserSelectionCallback);
+ sendUserSelectionSelect(networkRequestUserSelectionCallback, mSelectedNetwork);
+ mLooper.dispatchAll();
+
+ // Verify WifiConfiguration params.
+ validateConnectParams(mSelectedNetwork.SSID, null);
+ verify(mWifiMetrics).setNominatorForNetwork(anyInt(),
+ eq(WifiMetricsProto.ConnectionEvent.NOMINATOR_SPECIFIER));
+
+ verify(mClientModeImpl).disconnectCommand();
+ verify(mClientModeImpl).connect(eq(null), eq(TEST_NETWORK_ID_1), any(Binder.class),
+ mConnectListenerArgumentCaptor.capture(), anyInt(), anyInt());
+ }
+
+ /**
* Verify handling of user selection to reject the request.
*/
@Test
@@ -2669,13 +2796,33 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
verify(mNetworkRequestMatchCallback, atLeastOnce()).onMatch(anyList());
}
+ private void verifyPeriodicScans(long...expectedIntervalsInSeconds) {
+ PeriodicScanParams[] periodicScanParams =
+ new PeriodicScanParams[expectedIntervalsInSeconds.length];
+ for (int i = 0; i < expectedIntervalsInSeconds.length; i++) {
+ periodicScanParams[i] =
+ new PeriodicScanParams(expectedIntervalsInSeconds[i], mTestScanDatas);
+ }
+ verifyPeriodicScans(0L, periodicScanParams);
+ }
+
+ private static class PeriodicScanParams {
+ public final long expectedIntervalInSeconds;
+ public final WifiScanner.ScanData[] scanDatas;
+
+ PeriodicScanParams(long expectedIntervalInSeconds, WifiScanner.ScanData[] scanDatas) {
+ this.expectedIntervalInSeconds = expectedIntervalInSeconds;
+ this.scanDatas = scanDatas;
+ }
+ }
+
// Simulates the periodic scans performed to find a matching network.
// a) Start scan
// b) Scan results received.
// c) Set alarm for next scan at the expected interval.
// d) Alarm fires, go to step a) again and repeat.
- private void verifyPeriodicScans(long...expectedIntervalsInSeconds) {
- when(mClock.getElapsedSinceBootMillis()).thenReturn(0L);
+ private void verifyPeriodicScans(long nowMs, PeriodicScanParams... scanParams) {
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(nowMs);
OnAlarmListener alarmListener = null;
ScanListener scanListener = null;
@@ -2685,9 +2832,9 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
// Before we start scans, ensure that we look at the latest cached scan results.
mInOrder.verify(mWifiScanner).getSingleScanResults();
- for (int i = 0; i < expectedIntervalsInSeconds.length - 1; i++) {
- long expectedCurrentIntervalInMs = expectedIntervalsInSeconds[i];
- long expectedNextIntervalInMs = expectedIntervalsInSeconds[i + 1];
+ for (int i = 0; i < scanParams.length - 1; i++) {
+ long expectedCurrentIntervalInMs = scanParams[i].expectedIntervalInSeconds;
+ long expectedNextIntervalInMs = scanParams[i + 1].expectedIntervalInSeconds;
// First scan is immediately fired, so need for the alarm to fire.
if (expectedCurrentIntervalInMs != 0) {
@@ -2700,10 +2847,10 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
assertNotNull(scanListener);
// Now trigger the scan results callback and verify the alarm set for the next scan.
- scanListener.onResults(mTestScanDatas);
+ scanListener.onResults(scanParams[i].scanDatas);
mInOrder.verify(mAlarmManager).set(eq(AlarmManager.ELAPSED_REALTIME_WAKEUP),
- eq(expectedNextIntervalInMs), any(),
+ eq(expectedNextIntervalInMs + nowMs), any(),
mPeriodicScanListenerArgumentCaptor.capture(), any());
alarmListener = mPeriodicScanListenerArgumentCaptor.getValue();
assertNotNull(alarmListener);
@@ -2770,30 +2917,39 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
return "";
}
- // Helper method to setup the scan data for verifying the matching algo.
private void setupScanData(int scanResultType, String ssid1, String ssid2, String ssid3,
String ssid4) {
+ setupScanData(mTestScanDatas, scanResultType, ssid1, ssid2, ssid3, ssid4);
+ }
+
+ // Helper method to setup the scan data for verifying the matching algo.
+ private void setupScanData(WifiScanner.ScanData[] testScanDatas, int scanResultType,
+ String ssid1, String ssid2, String ssid3, String ssid4) {
// 4 scan results,
- assertEquals(1, mTestScanDatas.length);
- ScanResult[] scanResults = mTestScanDatas[0].getResults();
+ assertEquals(1, testScanDatas.length);
+ ScanResult[] scanResults = testScanDatas[0].getResults();
assertEquals(4, scanResults.length);
String caps = getScanResultCapsForType(scanResultType);
// Scan results have increasing RSSI.
scanResults[0].SSID = ssid1;
+ scanResults[0].wifiSsid = WifiSsid.createFromAsciiEncoded(ssid1);
scanResults[0].BSSID = TEST_BSSID_1;
scanResults[0].capabilities = caps;
scanResults[0].level = -45;
scanResults[1].SSID = ssid2;
+ scanResults[1].wifiSsid = WifiSsid.createFromAsciiEncoded(ssid2);
scanResults[1].BSSID = TEST_BSSID_2;
scanResults[1].capabilities = caps;
scanResults[1].level = -35;
scanResults[2].SSID = ssid3;
+ scanResults[2].wifiSsid = WifiSsid.createFromAsciiEncoded(ssid3);
scanResults[2].BSSID = TEST_BSSID_3;
scanResults[2].capabilities = caps;
scanResults[2].level = -25;
scanResults[3].SSID = ssid4;
+ scanResults[3].wifiSsid = WifiSsid.createFromAsciiEncoded(ssid4);
scanResults[3].BSSID = TEST_BSSID_4;
scanResults[3].capabilities = caps;
scanResults[3].level = -15;
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java
index 0bd14a470..1507e9c55 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java
@@ -741,6 +741,56 @@ public class WifiNetworkSelectorTest extends WifiBaseTest {
}
/**
+ * Wifi network selector stays with current network if current network is not nominated
+ * but has the higher score
+ */
+ @Test
+ public void includeCurrentNetworkWhenCurrentNetworkNotNominated() {
+ String[] ssids = {"\"test1\"", "\"test2\""};
+ String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"};
+ int[] freqs = {2437, 5120};
+ String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[WPA2-PSK][ESS]"};
+ int[] levels = {mThresholdMinimumRssi2G + 10, mThresholdMinimumRssi2G + 20};
+ int[] securities = {SECURITY_EAP, SECURITY_PSK};
+ // VHT cap IE
+ byte[] iesBytes = {(byte) 0x92, (byte) 0x01, (byte) 0x80, (byte) 0x33, (byte) 0xaa,
+ (byte) 0xff, (byte) 0x00, (byte) 0x00, (byte) 0xaa, (byte) 0xff, (byte) 0x00,
+ (byte) 0x00};
+ byte[][] iesByteStream = {iesBytes, iesBytes};
+ // Make a network selection to connect to test1.
+ ScanDetailsAndWifiConfigs scanDetailsAndConfigs =
+ WifiNetworkSelectorTestUtil.setupScanDetailsAndConfigStore(ssids, bssids,
+ freqs, caps, levels, securities, mWifiConfigManager, mClock, iesByteStream);
+ List<ScanDetail> scanDetails = scanDetailsAndConfigs.getScanDetails();
+ assertEquals(2, scanDetails.size());
+ HashSet<String> blocklist = new HashSet<String>();
+ List<WifiCandidates.Candidate> candidates = mWifiNetworkSelector.getCandidatesFromScan(
+ scanDetails, blocklist, mWifiInfo, false, true, false);
+ WifiConfiguration candidate = mWifiNetworkSelector.selectNetwork(candidates);
+
+ when(mWifiInfo.getSupplicantState()).thenReturn(SupplicantState.COMPLETED);
+ when(mWifiInfo.getNetworkId()).thenReturn(0); // 0 is current network
+ when(mWifiInfo.getBSSID()).thenReturn(bssids[0]);
+ when(mWifiInfo.is24GHz()).thenReturn(true);
+ when(mWifiInfo.getScore()).thenReturn(ConnectedScore.WIFI_TRANSITION_SCORE);
+ when(mWifiInfo.is5GHz()).thenReturn(false);
+ when(mWifiInfo.getFrequency()).thenReturn(2400);
+ when(mWifiInfo.getRssi()).thenReturn(levels[0]);
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(SystemClock.elapsedRealtime()
+ + WifiNetworkSelector.MINIMUM_NETWORK_SELECTION_INTERVAL_MS + 2000);
+
+ when(mThroughputPredictor.predictThroughput(any(), anyInt(), anyInt(), anyInt(),
+ anyInt(), anyInt(), anyInt(), anyInt(), anyBoolean())).thenReturn(100);
+ // Force to return 2nd network in the network nominator
+ mDummyNominator.setNetworkIndexToReturn(1);
+
+ candidates = mWifiNetworkSelector.getCandidatesFromScan(
+ scanDetails, blocklist, mWifiInfo, true, false, false);
+ assertEquals(2, candidates.size());
+ assertEquals(100, candidates.get(0).getPredictedThroughputMbps());
+ }
+
+ /**
* If two qualified networks, test1 and test2, are in range when the user selects test2 over
* test1, WifiNetworkSelector will override the NetworkSelector's choice to connect to test1
* with test2.
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java b/tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java
index 674ff8c9d..b85f223b7 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiScoreReportTest.java
@@ -20,15 +20,15 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.AdditionalAnswers.answerVoid;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.anyLong;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -38,6 +38,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.res.Resources;
+import android.database.ContentObserver;
import android.net.ConnectivityManager;
import android.net.LinkProperties;
import android.net.Network;
@@ -50,6 +51,7 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.os.Handler;
import android.os.IBinder;
+import android.os.Looper;
import android.os.RemoteException;
import android.os.test.TestLooper;
@@ -60,6 +62,7 @@ import com.android.wifi.resources.R;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -101,6 +104,9 @@ public class WifiScoreReportTest extends WifiBaseTest {
@Mock WifiNative mWifiNative;
@Mock BssidBlocklistMonitor mBssidBlocklistMonitor;
@Mock Network mNetwork;
+ @Mock DeviceConfigFacade mDeviceConfigFacade;
+ @Mock Looper mWifiLooper;
+ @Mock FrameworkFacade mFrameworkFacade;
private TestLooper mLooper;
public class WifiConnectedNetworkScorerImpl extends IWifiConnectedNetworkScorer.Stub {
@@ -174,6 +180,9 @@ public class WifiScoreReportTest extends WifiBaseTest {
when(resources.getInteger(
R.integer.config_wifiFrameworkMinPacketPerSecondHighTraffic))
.thenReturn(100);
+ when(resources.getBoolean(
+ R.bool.config_wifiMinConfirmationDurationSendNetworkScoreEnabled))
+ .thenReturn(false);
}
/**
@@ -196,9 +205,20 @@ public class WifiScoreReportTest extends WifiBaseTest {
mClock = new FakeClock();
mScoringParams = new ScoringParams();
mWifiThreadRunner = new WifiThreadRunner(new Handler(mLooper.getLooper()));
+ when(mFrameworkFacade.getIntegerSetting(any(Context.class),
+ eq(WifiScoreReport.SETTINGS_SECURE_ADAPTIVE_CONNECTIVITY_ENABLED), eq(1)))
+ .thenReturn(1);
mWifiScoreReport = new WifiScoreReport(mScoringParams, mClock, mWifiMetrics, mWifiInfo,
- mWifiNative, mBssidBlocklistMonitor, mWifiThreadRunner);
+ mWifiNative, mBssidBlocklistMonitor, mWifiThreadRunner,
+ mDeviceConfigFacade, mContext, mWifiLooper, mFrameworkFacade);
mWifiScoreReport.setNetworkAgent(mNetworkAgent);
+ mWifiScoreReport.initialize();
+ 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);
+ when(mDeviceConfigFacade.getRssiThresholdNotSendLowScoreToCsDbm()).thenReturn(
+ DeviceConfigFacade.DEFAULT_RSSI_THRESHOLD_NOT_SEND_LOW_SCORE_TO_CS_DBM);
}
/**
@@ -761,7 +781,7 @@ public class WifiScoreReportTest extends WifiBaseTest {
}
/**
- * Verify BSSID blocklist doesnot happen when score stays below threshold for less than the
+ * Verify BSSID blocklist does not happen when score stays below threshold for less than the
* minimum duration
*/
@Test
@@ -781,7 +801,8 @@ public class WifiScoreReportTest extends WifiBaseTest {
mLooper.dispatchAll();
mWifiScoreReport.stopConnectedNetworkScorer();
mLooper.dispatchAll();
- verify(mBssidBlocklistMonitor, never()).blockBssidForDurationMs(any(), any(), anyLong());
+ verify(mBssidBlocklistMonitor, never()).handleBssidConnectionFailure(any(), any(),
+ anyInt(), anyInt());
}
/**
@@ -805,11 +826,12 @@ public class WifiScoreReportTest extends WifiBaseTest {
mLooper.dispatchAll();
mWifiScoreReport.stopConnectedNetworkScorer();
mLooper.dispatchAll();
- verify(mBssidBlocklistMonitor).blockBssidForDurationMs(any(), any(), anyLong());
+ verify(mBssidBlocklistMonitor).handleBssidConnectionFailure(any(), any(),
+ eq(BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE), anyInt());
}
/**
- * Verify BSSID blocklist doesnot happen when there is score flip flop
+ * Verify BSSID blocklist does not happen when there is score flip flop
*/
@Test
public void bssidBlockListDoesnotHappenWhenExitingIsReset() throws Exception {
@@ -831,6 +853,229 @@ public class WifiScoreReportTest extends WifiBaseTest {
mLooper.dispatchAll();
mWifiScoreReport.stopConnectedNetworkScorer();
mLooper.dispatchAll();
- verify(mBssidBlocklistMonitor, never()).blockBssidForDurationMs(any(), any(), anyLong());
+ verify(mBssidBlocklistMonitor, never()).handleBssidConnectionFailure(any(), any(),
+ anyInt(), anyInt());
+ }
+
+ /**
+ * Verify that the initial score value in WifiInfo is the max when onStart is called.
+ */
+ @Test
+ public void testOnStartInitialScoreInWifiInfoIsMaxScore() throws Exception {
+ when(mNetwork.getNetId()).thenReturn(TEST_NETWORK_ID);
+ mWifiScoreReport.startConnectedNetworkScorer(TEST_NETWORK_ID);
+ mWifiScoreReport.setWifiConnectedNetworkScorer(mAppBinder, mWifiConnectedNetworkScorer);
+ assertEquals(ConnectedScore.WIFI_MAX_SCORE, mWifiInfo.getScore());
+ }
+
+ /**
+ * 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;
+ mWifiInfo.setRssi(-65);
+ 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);
+ mWifiInfo.setRssi(-70);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent).sendNetworkScore(60);
+ mClock.mWallClockMillis = 3010;
+ mWifiInfo.setRssi(-65);
+ 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 and RSSI check is added for reporting low score when it is
+ * enabled in config overlay
+ */
+ @Test
+ public void confirmationDurationAndRssiCheckIsAddedForSendingLowScore() 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;
+ mWifiInfo.setRssi(-65);
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 47);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent, never()).sendNetworkScore(47);
+ mClock.mWallClockMillis = 10
+ + mDeviceConfigFacade.DEFAULT_MIN_CONFIRMATION_DURATION_SEND_LOW_SCORE_MS + 3000;
+ mWifiInfo.setRssi(-68);
+ 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;
+ mWifiInfo.setRssi(-70);
+ 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);
+ }
+
+ /**
+ * Verify NUD check is not recommended and the score of 51 is sent to connectivity service
+ * when adaptive connectivity is disabled for AOSP scorer.
+ */
+ @Test
+ public void verifyNudCheckAndScoreIfToggleOffForAospScorer() throws Exception {
+ mWifiInfo.setFrequency(5220);
+ mWifiInfo.setRssi(-85);
+ ArgumentCaptor<ContentObserver> observer = ArgumentCaptor.forClass(ContentObserver.class);
+ verify(mFrameworkFacade).registerContentObserver(
+ any(), any(), eq(true), observer.capture());
+ when(mFrameworkFacade.getIntegerSetting(any(Context.class),
+ eq(WifiScoreReport.SETTINGS_SECURE_ADAPTIVE_CONNECTIVITY_ENABLED), eq(1)))
+ .thenReturn(0);
+ observer.getValue().onChange(true);
+ mWifiScoreReport.calculateAndReportScore();
+ assertFalse(mWifiScoreReport.shouldCheckIpLayer());
+ verify(mNetworkAgent).sendNetworkScore(51);
+ }
+
+ /**
+ * Verify NUD check is not recommended and the score of 51 is sent to connectivity service
+ * when adaptive connectivity is disabled for external Wi-Fi scorer.
+ */
+ @Test
+ public void verifyNudCheckAndScoreIfToggleOffForExternalScorer() 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);
+
+ ArgumentCaptor<ContentObserver> observer = ArgumentCaptor.forClass(ContentObserver.class);
+ verify(mFrameworkFacade).registerContentObserver(
+ any(), any(), eq(true), observer.capture());
+ when(mFrameworkFacade.getIntegerSetting(any(Context.class),
+ eq(WifiScoreReport.SETTINGS_SECURE_ADAPTIVE_CONNECTIVITY_ENABLED), eq(1)))
+ .thenReturn(0);
+ observer.getValue().onChange(true);
+
+ mClock.mWallClockMillis = 10;
+ scorerImpl.mScoreUpdateObserver.notifyScoreUpdate(scorerImpl.mSessionId, 49);
+ mLooper.dispatchAll();
+ verify(mNetworkAgent, never()).sendNetworkScore(anyInt());
+ assertFalse(mWifiScoreReport.shouldCheckIpLayer());
+
+ 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(51);
}
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
index 55f35e380..c1ddd6321 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
@@ -571,7 +571,8 @@ public class WifiServiceImplTest extends WifiBaseTest {
assertTrue(mWifiServiceImpl.setWifiEnabled(TEST_PACKAGE_NAME, false));
inorder.verify(mWifiMetrics).logUserActionEvent(UserActionEvent.EVENT_TOGGLE_WIFI_ON);
inorder.verify(mWifiMetrics).incrementNumWifiToggles(eq(true), eq(true));
- inorder.verify(mWifiMetrics).logUserActionEvent(UserActionEvent.EVENT_TOGGLE_WIFI_OFF);
+ inorder.verify(mWifiMetrics).logUserActionEvent(eq(UserActionEvent.EVENT_TOGGLE_WIFI_OFF),
+ anyInt());
inorder.verify(mWifiMetrics).incrementNumWifiToggles(eq(true), eq(false));
}
@@ -3621,7 +3622,8 @@ public class WifiServiceImplTest extends WifiBaseTest {
mock(IActionListener.class), 0);
verify(mClientModeImpl).connect(any(WifiConfiguration.class), anyInt(),
any(Binder.class), any(IActionListener.class), anyInt(), anyInt());
- verify(mWifiMetrics).logUserActionEvent(eq(UserActionEvent.EVENT_MANUAL_CONNECT), anyInt());
+ verify(mWifiMetrics).logUserActionEvent(eq(UserActionEvent.EVENT_ADD_OR_UPDATE_NETWORK),
+ anyInt());
}
/**
@@ -3632,8 +3634,11 @@ public class WifiServiceImplTest extends WifiBaseTest {
public void testSaveNetworkWithPrivilegedPermission() throws Exception {
when(mContext.checkPermission(eq(android.Manifest.permission.NETWORK_SETTINGS),
anyInt(), anyInt())).thenReturn(PackageManager.PERMISSION_GRANTED);
+ when(mWifiPermissionsUtil.checkNetworkSettingsPermission(anyInt())).thenReturn(true);
mWifiServiceImpl.save(mock(WifiConfiguration.class), mock(Binder.class),
mock(IActionListener.class), 0);
+ verify(mWifiMetrics).logUserActionEvent(eq(UserActionEvent.EVENT_ADD_OR_UPDATE_NETWORK),
+ anyInt());
verify(mClientModeImpl).save(any(WifiConfiguration.class),
any(Binder.class), any(IActionListener.class), anyInt(), anyInt());
}
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/TestUtils.java b/tests/wifitests/src/com/android/server/wifi/aware/TestUtils.java
index 555e89115..351bb9895 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/TestUtils.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/TestUtils.java
@@ -49,7 +49,7 @@ public class TestUtils {
public boolean enableAndConfigure(short transactionId, ConfigRequest configRequest,
boolean notifyIdentityChange, boolean initialConfiguration, boolean isInteractive,
- boolean isIdle) {
+ boolean isIdle, boolean rangingEnabled) {
addTransactionId(transactionId);
return true;
}
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
index f496b1c95..a21442f6c 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
@@ -1846,7 +1846,7 @@ public class WifiAwareDataPathStateManagerTest extends WifiBaseTest {
if (startUpSequence) {
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
}
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareNativeApiTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareNativeApiTest.java
index 0a30228cf..08eae1d36 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareNativeApiTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareNativeApiTest.java
@@ -595,7 +595,7 @@ public class WifiAwareNativeApiTest extends WifiBaseTest {
mIsInterface12 = isHal12;
mDut.enableAndConfigure(transactionId, configRequest, notifyIdentityChange,
- initialConfiguration, isInteractive, isIdle);
+ initialConfiguration, isInteractive, isIdle, false);
ArgumentCaptor<NanEnableRequest> enableReqCaptor = ArgumentCaptor.forClass(
NanEnableRequest.class);
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java
index f5da0b2f1..7292fca36 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareStateManagerTest.java
@@ -268,7 +268,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback1).onConnectSuccess(clientId1);
@@ -369,7 +369,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -466,7 +466,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -512,7 +512,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -540,7 +540,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
InOrder inOrder = inOrder(mMockContext, mMockNative, mockCallback);
when(mMockNative.enableAndConfigure(anyShort(), any(), anyBoolean(),
- anyBoolean(), eq(true), eq(false))).thenReturn(false);
+ anyBoolean(), eq(true), eq(false), eq(false))).thenReturn(false);
// (1) check initial state
mDut.enableUsage();
@@ -555,7 +555,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
inOrder.verify(mockCallback).onConnectFail(NanStatusType.INTERNAL_FAILURE);
validateInternalClientInfoCleanedUp(clientId);
@@ -601,7 +601,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionIdCapture.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
short transactionId = transactionIdCapture.getValue();
mDut.onConfigSuccessResponse(transactionId);
mMockLooper.dispatchAll();
@@ -611,7 +611,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, true);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionIdCapture.capture(),
- eq(configRequest), eq(true), eq(false), eq(true), eq(false));
+ eq(configRequest), eq(true), eq(false), eq(true), eq(false), eq(false));
transactionId = transactionIdCapture.getValue();
mDut.onConfigSuccessResponse(transactionId);
mMockLooper.dispatchAll();
@@ -689,7 +689,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -755,7 +755,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -828,7 +828,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -912,7 +912,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -931,6 +931,12 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
inOrderM.verify(mAwareMetricsMock).recordDiscoverySessionWithRanging(eq(uid), eq(false),
eq(-1), eq(-1), any());
inOrderM.verify(mAwareMetricsMock).recordDiscoveryStatus(uid, NanStatusType.SUCCESS, true);
+ mMockLooper.dispatchAll();
+ // Verify reconfigure aware to enable ranging.
+ inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
+ eq(false), eq(false), eq(true), eq(false), eq(true));
+ mDut.onConfigSuccessResponse(transactionId.getValue());
+ mMockLooper.dispatchAll();
// (3) update publish
mDut.updatePublish(clientId, sessionId.getValue(), publishConfig);
@@ -979,6 +985,12 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
inOrder.verify(mockSessionCallback).onSessionConfigFail(NanStatusType.INVALID_SESSION_ID);
inOrderM.verify(mAwareMetricsMock).recordDiscoveryStatus(uid,
NanStatusType.INVALID_SESSION_ID, true);
+ // Verify reconfigure aware to disable ranging.
+ mMockLooper.dispatchAll();
+ inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
+ eq(false), eq(false), eq(true), eq(false), eq(false));
+ mDut.onConfigSuccessResponse(transactionId.getValue());
+ mMockLooper.dispatchAll();
// (9) try updating again - do nothing/get nothing
mDut.updatePublish(clientId, sessionId.getValue(), publishConfig);
@@ -1024,7 +1036,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1092,7 +1104,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1166,7 +1178,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1250,7 +1262,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1269,6 +1281,12 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
inOrderM.verify(mAwareMetricsMock).recordDiscoverySessionWithRanging(eq(uid), eq(true),
eq(-1), eq(rangeMax), any());
inOrderM.verify(mAwareMetricsMock).recordDiscoveryStatus(uid, NanStatusType.SUCCESS, false);
+ // Verify reconfigure aware to enable ranging.
+ mMockLooper.dispatchAll();
+ inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
+ eq(false), eq(false), eq(true), eq(false), eq(true));
+ mDut.onConfigSuccessResponse(transactionId.getValue());
+ mMockLooper.dispatchAll();
// (3) update subscribe
mDut.updateSubscribe(clientId, sessionId.getValue(), subscribeConfig);
@@ -1343,7 +1361,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1426,7 +1444,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1443,6 +1461,13 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
inOrderM.verify(mAwareMetricsMock).recordDiscoverySessionWithRanging(eq(uid), eq(true),
eq(rangeMin), eq(rangeMax), any());
inOrderM.verify(mAwareMetricsMock).recordDiscoveryStatus(uid, NanStatusType.SUCCESS, false);
+ // Verify reconfigure aware to enable ranging.
+ mMockLooper.dispatchAll();
+ inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
+ eq(false), eq(false), eq(true), eq(false), eq(true));
+ mDut.onConfigSuccessResponse(transactionId.getValue());
+ mMockLooper.dispatchAll();
+
// (2) 2 matches : with and w/o range
mDut.onMatchNotification(subscribeId, requestorId, peerMac, peerSsi.getBytes(),
@@ -1554,7 +1579,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1658,7 +1683,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1752,7 +1777,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1823,7 +1848,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -1951,7 +1976,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -2040,7 +2065,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -2130,7 +2155,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -2244,7 +2269,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest1, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest1), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest1), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId1);
@@ -2379,7 +2404,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -2513,7 +2538,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -2746,7 +2771,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest1, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- crCapture.capture(), eq(false), eq(true), eq(true), eq(false));
+ crCapture.capture(), eq(false), eq(true), eq(true), eq(false), eq(false));
collector.checkThat("merge: stage 1", crCapture.getValue(), equalTo(configRequest1));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
@@ -2764,7 +2789,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest3, true);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- crCapture.capture(), eq(true), eq(false), eq(true), eq(false));
+ crCapture.capture(), eq(true), eq(false), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback3).onConnectSuccess(clientId3);
@@ -2786,7 +2811,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
mMockLooper.dispatchAll();
validateInternalClientInfoCleanedUp(clientId3);
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- crCapture.capture(), eq(false), eq(false), eq(true), eq(false));
+ crCapture.capture(), eq(false), eq(false), eq(true), eq(false), eq(false));
collector.checkThat("configRequest1", configRequest1, equalTo(crCapture.getValue()));
@@ -2837,7 +2862,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- any(ConfigRequest.class), eq(false), eq(true), eq(true), eq(false));
+ any(ConfigRequest.class), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -2855,7 +2880,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, true);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- any(ConfigRequest.class), eq(true), eq(false), eq(true), eq(false));
+ any(ConfigRequest.class), eq(true), eq(false), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -2918,7 +2943,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -2995,7 +3020,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -3041,7 +3066,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
verifyNoMoreInteractions(mMockNative, mockCallback, mockSessionCallback);
}
@@ -3077,7 +3102,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
short transactionIdConfig = transactionId.getValue();
mDut.onConfigSuccessResponse(transactionIdConfig);
mMockLooper.dispatchAll();
@@ -3135,7 +3160,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(), eq(configRequest),
- eq(false), eq(true), eq(true), eq(false));
+ eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -3192,7 +3217,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -3247,7 +3272,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -3303,7 +3328,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -3312,7 +3337,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
simulatePowerStateChangeInteractive(false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(false), eq(false), eq(false));
+ eq(configRequest), eq(false), eq(false), eq(false), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
@@ -3320,7 +3345,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
simulatePowerStateChangeDoze(true);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(false), eq(false), eq(true));
+ eq(configRequest), eq(false), eq(false), eq(false), eq(true), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
@@ -3328,7 +3353,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
simulatePowerStateChangeInteractive(true); // effectively treated as no-doze
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(false), eq(true), eq(true));
+ eq(configRequest), eq(false), eq(false), eq(true), eq(true), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
@@ -3371,7 +3396,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
mMockLooper.dispatchAll();
inOrder.verify(mMockNativeManager).tryToGetAware();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -3448,7 +3473,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
mMockLooper.dispatchAll();
inOrder.verify(mMockNativeManager).tryToGetAware();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -3521,7 +3546,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
mMockLooper.dispatchAll();
inOrder.verify(mMockNativeManager).tryToGetAware();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -3591,7 +3616,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
@@ -3607,7 +3632,7 @@ public class WifiAwareStateManagerTest extends WifiBaseTest {
configRequest, false);
mMockLooper.dispatchAll();
inOrder.verify(mMockNative).enableAndConfigure(transactionId.capture(),
- eq(configRequest), eq(false), eq(true), eq(true), eq(false));
+ eq(configRequest), eq(false), eq(true), eq(true), eq(false), eq(false));
mDut.onConfigSuccessResponse(transactionId.getValue());
mMockLooper.dispatchAll();
inOrder.verify(mockCallback).onConnectSuccess(clientId);
diff --git a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
index ad207bfe2..cb459728a 100644
--- a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
@@ -20,6 +20,7 @@ import static android.app.AppOpsManager.MODE_IGNORED;
import static android.app.AppOpsManager.OPSTR_CHANGE_WIFI_STATE;
import static android.net.wifi.WifiConfiguration.METERED_OVERRIDE_METERED;
import static android.net.wifi.WifiConfiguration.METERED_OVERRIDE_NOT_METERED;
+import static android.net.wifi.WifiInfo.DEFAULT_MAC_ADDRESS;
import static com.android.server.wifi.WifiConfigurationTestUtil.SECURITY_EAP;
@@ -50,6 +51,7 @@ import static org.mockito.MockitoAnnotations.initMocks;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
+import android.net.MacAddress;
import android.net.Uri;
import android.net.wifi.EAPConstants;
import android.net.wifi.ScanResult;
@@ -78,6 +80,7 @@ import com.android.server.wifi.ClientModeImpl;
import com.android.server.wifi.Clock;
import com.android.server.wifi.FakeKeys;
import com.android.server.wifi.FrameworkFacade;
+import com.android.server.wifi.MacAddressUtil;
import com.android.server.wifi.NetworkUpdateResult;
import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.WifiCarrierInfoManager;
@@ -189,6 +192,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Mock TelephonyManager mTelephonyManager;
@Mock SubscriptionManager mSubscriptionManager;
@Mock WifiNetworkSuggestionsManager mWifiNetworkSuggestionsManager;
+ @Mock MacAddressUtil mMacAddressUtil;
@Mock WifiPermissionsUtil mWifiPermissionsUtil;
Handler mHandler;
@@ -226,7 +230,8 @@ public class PasspointManagerTest extends WifiBaseTest {
mHandler = new Handler(mLooper.getLooper());
mManager = new PasspointManager(mContext, mWifiInjector, mHandler, mWifiNative,
mWifiKeyStore, mClock, mObjectFactory, mWifiConfigManager,
- mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager, mWifiPermissionsUtil);
+ mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager, mMacAddressUtil,
+ mWifiPermissionsUtil);
ArgumentCaptor<PasspointEventHandler.Callbacks> callbacks =
ArgumentCaptor.forClass(PasspointEventHandler.Callbacks.class);
verify(mObjectFactory).makePasspointEventHandler(any(WifiNative.class),
@@ -775,7 +780,8 @@ public class PasspointManagerTest extends WifiBaseTest {
.thenReturn(true);
PasspointManager ut = new PasspointManager(mContext, mWifiInjector, mHandler, mWifiNative,
mWifiKeyStore, mClock, spyFactory, mWifiConfigManager,
- mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager, mWifiPermissionsUtil);
+ mWifiConfigStore, mWifiMetrics, mWifiCarrierInfoManager, mMacAddressUtil,
+ mWifiPermissionsUtil);
assertTrue(ut.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE,
true, true));
@@ -1256,6 +1262,39 @@ public class PasspointManagerTest extends WifiBaseTest {
}
/**
+ * Verify that a {@link WifiConfiguration} will be returned with the correct value for the
+ * randomized MAC address.
+ */
+ @Test
+ public void getWifiConfigsForPasspointProfilesWithoutEnhancedMacRandomization() {
+ MacAddress randomizedMacAddress = MacAddress.fromString("01:23:45:67:89:ab");
+ when(mMacAddressUtil.calculatePersistentMac(any(), any())).thenReturn(randomizedMacAddress);
+ when(mWifiConfigManager.shouldUseAggressiveRandomization(any())).thenReturn(false);
+ PasspointProvider provider = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
+ TEST_PACKAGE, false, null);
+ WifiConfiguration config = mManager.getWifiConfigsForPasspointProfiles(
+ Collections.singletonList(provider.getConfig().getUniqueId())).get(0);
+ assertEquals(config.getRandomizedMacAddress(), randomizedMacAddress);
+ }
+
+ /**
+ * Verify that a {@link WifiConfiguration} will be returned with DEFAULT_MAC_ADDRESS for the
+ * randomized MAC address if enhanced mac randomization is enabled. This value will display in
+ * the wifi picker's network details page as "Not available" if the network is disconnected.
+ */
+ @Test
+ public void getWifiConfigsForPasspointProfilesWithEnhancedMacRandomization() {
+ MacAddress randomizedMacAddress = MacAddress.fromString("01:23:45:67:89:ab");
+ when(mMacAddressUtil.calculatePersistentMac(any(), any())).thenReturn(randomizedMacAddress);
+ when(mWifiConfigManager.shouldUseAggressiveRandomization(any())).thenReturn(true);
+ PasspointProvider provider = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
+ TEST_PACKAGE, false, null);
+ WifiConfiguration config = mManager.getWifiConfigsForPasspointProfiles(
+ Collections.singletonList(provider.getConfig().getUniqueId())).get(0);
+ assertEquals(config.getRandomizedMacAddress(), MacAddress.fromString(DEFAULT_MAC_ADDRESS));
+ }
+
+ /**
* Verify that an empty map will be returned when trying to get all matching FQDN for a {@code
* null} {@link ScanResult}.
*/
diff --git a/tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java b/tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java
index 6a7f2038c..b4943d776 100644
--- a/tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java
@@ -2882,6 +2882,8 @@ public class SupplicantP2pIfaceHalTest extends WifiBaseTest {
config.wps.setup = wpsProvMethod;
config.wps.pin = pin;
+ config.groupOwnerIntent = WifiP2pServiceImpl.DEFAULT_GROUP_OWNER_INTENT;
+
return config;
}
diff --git a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
index cae812d58..171dc9b24 100644
--- a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
@@ -56,6 +56,8 @@ import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.TetheringManager;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WpsInfo;
import android.net.wifi.p2p.WifiP2pConfig;
@@ -65,6 +67,7 @@ import android.net.wifi.p2p.WifiP2pGroup;
import android.net.wifi.p2p.WifiP2pGroupList;
import android.net.wifi.p2p.WifiP2pInfo;
import android.net.wifi.p2p.WifiP2pManager;
+import android.net.wifi.p2p.WifiP2pProvDiscEvent;
import android.net.wifi.p2p.WifiP2pWfdInfo;
import android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
import android.net.wifi.p2p.nsd.WifiP2pServiceRequest;
@@ -167,6 +170,8 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Mock WifiP2pServiceRequest mTestWifiP2pServiceRequest;
@Mock UserManager mUserManager;
@Mock WifiP2pMetrics mWifiP2pMetrics;
+ @Mock WifiManager mWifiManager;
+ @Mock WifiInfo mWifiInfo;
@Spy FakeWifiLog mLog;
@Spy MockWifiP2pMonitor mWifiMonitor;
@@ -626,6 +631,25 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
}
/**
+ * Send simple API msg.
+ *
+ * Mock the API msg with objects.
+ *
+ * @param replyMessenger for checking replied message.
+ */
+ private void sendSimpleMsg(Messenger replyMessenger,
+ int what, Object obj) throws Exception {
+ Message msg = Message.obtain();
+ msg.what = what;
+ msg.obj = obj;
+ if (replyMessenger != null) {
+ msg.replyTo = replyMessenger;
+ }
+ mP2pStateMachineMessenger.send(Message.obtain(msg));
+ mLooper.dispatchAll();
+ }
+
+ /**
* force P2p State enter InactiveState to start others unit test
*
* @param clientBinder client binder to use for p2p channel init
@@ -747,6 +771,8 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mContext.getResources()).thenReturn(mResources);
+ when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
+ when(mWifiManager.getConnectionInfo()).thenReturn(mWifiInfo);
when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_DEVICE_NAME))).thenReturn(thisDeviceName);
when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_PENDING_FACTORY_RESET))).thenReturn(false);
when(mHandlerThread.getLooper()).thenReturn(mLooper.getLooper());
@@ -772,6 +798,8 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
when(mWifiPermissionsUtil.checkNetworkStackPermission(anyInt())).thenReturn(true);
when(mWifiPermissionsUtil.checkReadWifiCredentialPermission(anyInt())).thenReturn(true);
when(mWifiPermissionsUtil.checkConfigOverridePermission(anyInt())).thenReturn(true);
+ when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
+ anyBoolean())).thenReturn(true);
when(mWifiNative.setupInterface(any(), any())).thenReturn(IFACE_NAME_P2P);
when(mWifiNative.p2pGetDeviceAddress()).thenReturn(thisDeviceMac);
doAnswer(new AnswerWithArguments() {
@@ -982,8 +1010,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
forceP2pEnabled(mClient1);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
doNothing().when(mWifiPermissionsUtil).checkPackage(anyInt(), anyString());
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pServiceAdd(any())).thenReturn(true);
sendAddLocalServiceMsg(mClientMessenger);
verify(mWifiNative).p2pServiceAdd(any());
@@ -1000,8 +1026,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
forceP2pEnabled(mClient1);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
doNothing().when(mWifiPermissionsUtil).checkPackage(anyInt(), anyString());
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pServiceAdd(any())).thenReturn(false);
sendAddLocalServiceMsg(mClientMessenger);
verify(mWifiNative).p2pServiceAdd(any());
@@ -1062,8 +1086,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testConnectWithConfigValidAsGroupSuccess() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
when(mWifiNative.p2pGroupAdd(any(), eq(true))).thenReturn(true);
sendConnectMsgWithConfigValidAsGroup(mClientMessenger);
@@ -1079,8 +1101,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testConnectWithConfigValidAsGroupFailureWhenNativeCallFailure() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
when(mWifiNative.p2pGroupAdd(any(), eq(true))).thenReturn(false);
sendConnectMsgWithConfigValidAsGroup(mClientMessenger);
@@ -1147,8 +1167,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testCreateGroupWithConfigValidAsGroupSuccess() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
when(mWifiNative.p2pGroupAdd(any(), eq(false))).thenReturn(true);
sendCreateGroupMsgWithConfigValidAsGroup(mClientMessenger);
@@ -1165,8 +1183,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
public void testCreateGroupWithConfigValidAsGroupFailureWhenNativeCallFailure()
throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
when(mWifiNative.p2pGroupAdd(any(), eq(false))).thenReturn(false);
sendCreateGroupMsgWithConfigValidAsGroup(mClientMessenger);
@@ -1247,8 +1263,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testDiscoverPeersSuccess() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pFind(anyInt())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendDiscoverPeersMsg(mClientMessenger);
@@ -1264,8 +1278,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testDiscoverPeersFailureWhenNativeCallFailure() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pFind(anyInt())).thenReturn(false);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendDiscoverPeersMsg(mClientMessenger);
@@ -1364,8 +1376,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
.thenReturn("mServiceDiscReqId");
when(mWifiNative.p2pFind(anyInt())).thenReturn(true);
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendAddServiceRequestMsg(mClientMessenger);
sendDiscoverServiceMsg(mClientMessenger);
@@ -1383,8 +1393,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
public void testDiscoverServicesFailureWhenAddServiceRequestFailure() throws Exception {
when(mWifiNative.p2pServDiscReq(anyString(), anyString())).thenReturn(null);
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendAddServiceRequestMsg(mClientMessenger);
sendDiscoverServiceMsg(mClientMessenger);
@@ -1404,8 +1412,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
.thenReturn("mServiceDiscReqId");
when(mWifiNative.p2pFind(anyInt())).thenReturn(false);
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendAddServiceRequestMsg(mClientMessenger);
sendDiscoverServiceMsg(mClientMessenger);
@@ -1504,8 +1510,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
public void testRequestPeersSuccess() throws Exception {
forceP2pEnabled(mClient1);
mockPeersList();
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendRequestPeersMsg(mClientMessenger);
verify(mClientHandler).sendMessage(mMessageCaptor.capture());
@@ -1581,8 +1585,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
sendGroupStartedMsg(mTestWifiP2pGroup);
simulateTetherReady();
when(mWifiPermissionsUtil.checkLocalMacAddressPermission(anyInt())).thenReturn(false);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendRequestGroupInfoMsg(mClientMessenger);
verify(mClientHandler).sendMessage(mMessageCaptor.capture());
@@ -1606,8 +1608,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
sendGroupStartedMsg(mTestWifiP2pGroup);
simulateTetherReady();
when(mWifiPermissionsUtil.checkLocalMacAddressPermission(anyInt())).thenReturn(true);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendRequestGroupInfoMsg(mClientMessenger);
verify(mClientHandler).sendMessage(mMessageCaptor.capture());
@@ -1791,8 +1791,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testPeerScanMetricWhenSendDiscoverPeers() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pFind(anyInt())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendDiscoverPeersMsg(mClientMessenger);
@@ -1811,8 +1809,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
.thenReturn("mServiceDiscReqId");
when(mWifiNative.p2pFind(anyInt())).thenReturn(true);
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendAddServiceRequestMsg(mClientMessenger);
sendDiscoverServiceMsg(mClientMessenger);
@@ -1920,8 +1916,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testStartFreshConnectionEventWhenSendConnect() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
mockPeersList();
@@ -1943,8 +1937,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testStartReinvokeConnectionEventWhenSendConnect() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pGroupAdd(anyInt()))
.thenReturn(true);
when(mTestWifiP2pDevice.isGroupOwner()).thenReturn(true);
@@ -1976,8 +1968,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
public void testStartReinvokeConnectionEventWhenCreateGroup()
throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendCreateGroupMsg(mClientMessenger, WifiP2pGroup.NETWORK_ID_PERSISTENT, null);
@@ -1996,8 +1986,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testStartLocalConnectionWhenCreateGroup() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
// permissions for factory reset
@@ -2028,8 +2016,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testStartLocalConnectionEventWhenCreateTemporaryGroup() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendCreateGroupMsg(mClientMessenger, WifiP2pGroup.NETWORK_ID_TEMPORARY, null);
@@ -2049,8 +2035,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
public void testStartFastConnectionEventWhenSendConnectWithConfig()
throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pGroupAdd(any(), eq(true))).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
@@ -2075,8 +2059,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
public void testStartFastConnectionEventWhenCreateGroupWithConfig()
throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendCreateGroupMsg(mClientMessenger, 0, mTestWifiP2pFastConnectionConfig);
@@ -2118,8 +2100,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testEndConnectionEventWhenTimeout() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
@@ -2140,8 +2120,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testEndConnectionEventWhenCancel() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
@@ -2161,8 +2139,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testEndConnectionEventWhenProvDiscFailure() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
@@ -2182,8 +2158,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testEndConnectionEventWhenGroupRemoval() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
@@ -2203,8 +2177,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testEndConnectionEventWhenInvitationFailure() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
@@ -2244,8 +2216,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testRequestDeviceInfoSuccessWhenP2pEnabled() throws Exception {
forceP2pEnabled(mClient1);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO);
verify(mWifiPermissionsUtil).checkCanAccessWifiDirect(eq("testPkg1"), eq("testFeature"),
@@ -2263,8 +2233,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
*/
@Test
public void testRequestDeviceInfoReturnEmptyWifiP2pDeviceWhenP2pDisabled() throws Exception {
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO);
verify(mWifiPermissionsUtil).checkCanAccessWifiDirect(eq("testPkg1"), eq("testFeature"),
@@ -2284,8 +2252,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
public void testRequestDeviceInfoReturnsActualMacForNetworkSettingsApp() throws Exception {
forceP2pEnabled(mClient1);
when(mWifiPermissionsUtil.checkLocalMacAddressPermission(anyInt())).thenReturn(true);
- when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(),
- anyBoolean())).thenReturn(true);
sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO);
verify(mWifiPermissionsUtil).checkCanAccessWifiDirect(eq("testPkg1"), eq("testFeature"),
@@ -3578,6 +3544,8 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
@Test
public void testRequestDiscoveryStateWhenStarted() throws Exception {
forceP2pEnabled(mClient1);
+ when(mWifiPermissionsUtil.checkCanAccessWifiDirect(any(), any(),
+ anyInt(), anyBoolean())).thenReturn(false);
when(mWifiPermissionsUtil.checkCanAccessWifiDirect(eq("testPkg1"), eq("testFeature"),
anyInt(), anyBoolean())).thenReturn(true);
when(mWifiNative.p2pFind(anyInt())).thenReturn(true);
@@ -4002,4 +3970,108 @@ public class WifiP2pServiceImplTest extends WifiBaseTest {
Message message = mMessageCaptor.getValue();
assertEquals(WifiP2pManager.CONNECT_FAILED, message.what);
}
+
+ /**
+ * Verify the group owner intent value is selected correctly when no STA connection.
+ */
+ @Test
+ public void testGroupOwnerIntentSelectionWithoutStaConnection() throws Exception {
+ when(mWifiInfo.getNetworkId()).thenReturn(WifiConfiguration.INVALID_NETWORK_ID);
+ when(mWifiInfo.getFrequency()).thenReturn(2412);
+ forceP2pEnabled(mClient1);
+ sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
+
+ mockEnterProvisionDiscoveryState();
+
+ WifiP2pProvDiscEvent pdEvent = new WifiP2pProvDiscEvent();
+ pdEvent.device = mTestWifiP2pDevice;
+ sendSimpleMsg(null,
+ WifiP2pMonitor.P2P_PROV_DISC_PBC_RSP_EVENT,
+ pdEvent);
+
+ ArgumentCaptor<WifiP2pConfig> configCaptor =
+ ArgumentCaptor.forClass(WifiP2pConfig.class);
+ verify(mWifiNative).p2pConnect(configCaptor.capture(), anyBoolean());
+ WifiP2pConfig config = configCaptor.getValue();
+ assertEquals(WifiP2pServiceImpl.DEFAULT_GROUP_OWNER_INTENT + 1,
+ config.groupOwnerIntent);
+ }
+
+ /**
+ * Verify the group owner intent value is selected correctly when 2.4GHz STA connection.
+ */
+ @Test
+ public void testGroupOwnerIntentSelectionWith24GStaConnection() throws Exception {
+ when(mWifiInfo.getNetworkId()).thenReturn(1);
+ when(mWifiInfo.getFrequency()).thenReturn(2412);
+ forceP2pEnabled(mClient1);
+ sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
+
+ mockEnterProvisionDiscoveryState();
+
+ WifiP2pProvDiscEvent pdEvent = new WifiP2pProvDiscEvent();
+ pdEvent.device = mTestWifiP2pDevice;
+ sendSimpleMsg(null,
+ WifiP2pMonitor.P2P_PROV_DISC_PBC_RSP_EVENT,
+ pdEvent);
+
+ ArgumentCaptor<WifiP2pConfig> configCaptor =
+ ArgumentCaptor.forClass(WifiP2pConfig.class);
+ verify(mWifiNative).p2pConnect(configCaptor.capture(), anyBoolean());
+ WifiP2pConfig config = configCaptor.getValue();
+ assertEquals(WifiP2pConfig.GROUP_OWNER_INTENT_MIN,
+ config.groupOwnerIntent);
+ }
+
+ /**
+ * Verify the group owner intent value is selected correctly when 5GHz STA connection.
+ */
+ @Test
+ public void testGroupOwnerIntentSelectionWith5GHzStaConnection() throws Exception {
+ when(mWifiInfo.getNetworkId()).thenReturn(1);
+ when(mWifiInfo.getFrequency()).thenReturn(5200);
+ forceP2pEnabled(mClient1);
+ sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
+
+ mockEnterProvisionDiscoveryState();
+
+ WifiP2pProvDiscEvent pdEvent = new WifiP2pProvDiscEvent();
+ pdEvent.device = mTestWifiP2pDevice;
+ sendSimpleMsg(null,
+ WifiP2pMonitor.P2P_PROV_DISC_PBC_RSP_EVENT,
+ pdEvent);
+
+ ArgumentCaptor<WifiP2pConfig> configCaptor =
+ ArgumentCaptor.forClass(WifiP2pConfig.class);
+ verify(mWifiNative).p2pConnect(configCaptor.capture(), anyBoolean());
+ WifiP2pConfig config = configCaptor.getValue();
+ assertEquals(WifiP2pConfig.GROUP_OWNER_INTENT_MAX - 1,
+ config.groupOwnerIntent);
+ }
+
+ /**
+ * Verify the group owner intent value is selected correctly when 6GHz STA connection.
+ */
+ @Test
+ public void testGroupOwnerIntentSelectionWith6GHzStaConnection() throws Exception {
+ when(mWifiInfo.getNetworkId()).thenReturn(1);
+ when(mWifiInfo.getFrequency()).thenReturn(6000);
+ forceP2pEnabled(mClient1);
+ sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger);
+
+ mockEnterProvisionDiscoveryState();
+
+ WifiP2pProvDiscEvent pdEvent = new WifiP2pProvDiscEvent();
+ pdEvent.device = mTestWifiP2pDevice;
+ sendSimpleMsg(null,
+ WifiP2pMonitor.P2P_PROV_DISC_PBC_RSP_EVENT,
+ pdEvent);
+
+ ArgumentCaptor<WifiP2pConfig> configCaptor =
+ ArgumentCaptor.forClass(WifiP2pConfig.class);
+ verify(mWifiNative).p2pConnect(configCaptor.capture(), anyBoolean());
+ WifiP2pConfig config = configCaptor.getValue();
+ assertEquals(WifiP2pServiceImpl.DEFAULT_GROUP_OWNER_INTENT,
+ config.groupOwnerIntent);
+ }
}
diff --git a/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java b/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java
index 77c99a9d1..a0d1da854 100644
--- a/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java
@@ -663,8 +663,8 @@ public class InformationElementUtilTest extends WifiBaseTest {
capabilities.from(ies, beaconCap, true);
String result = capabilities.generateCapabilitiesString();
- assertEquals("[WPA2-EAP+EAP-SHA256+FILS-SHA256-CCMP][RSN-EAP+EAP-SHA256+FILS-SHA256-CCMP]",
- result);
+ assertEquals("[WPA2-EAP+EAP-SHA256+EAP-FILS-SHA256-CCMP]"
+ + "[RSN-EAP+EAP-SHA256+EAP-FILS-SHA256-CCMP]", result);
}
/**
@@ -704,8 +704,8 @@ public class InformationElementUtilTest extends WifiBaseTest {
capabilities.from(ies, beaconCap, true);
String result = capabilities.generateCapabilitiesString();
- assertEquals("[WPA2-EAP+EAP-SHA256+FILS-SHA384-CCMP][RSN-EAP+EAP-SHA256+FILS-SHA384-CCMP]",
- result);
+ assertEquals("[WPA2-EAP+EAP-SHA256+EAP-FILS-SHA384-CCMP]"
+ + "[RSN-EAP+EAP-SHA256+EAP-FILS-SHA384-CCMP]", result);
}
/**
diff --git a/tests/wifitests/src/com/android/server/wifi/util/ScanResultUtilTest.java b/tests/wifitests/src/com/android/server/wifi/util/ScanResultUtilTest.java
index e58d083c4..00e3a0bd2 100644
--- a/tests/wifitests/src/com/android/server/wifi/util/ScanResultUtilTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/util/ScanResultUtilTest.java
@@ -211,8 +211,8 @@ public class ScanResultUtilTest extends WifiBaseTest {
@Test
public void testFilsSha256AkmSupportedNetwork() {
final String ssid = "FILS-AP";
- String caps = "[WPA2-EAP+EAP-SHA256+FILS-SHA256-CCMP]"
- + "[RSN-EAP+EAP-SHA256+FILS-SHA256-CCMP][ESS]";
+ String caps = "[WPA2-EAP+EAP-SHA256+EAP-FILS-SHA256-CCMP]"
+ + "[RSN-EAP+EAP-SHA256+EAP-FILS-SHA256-CCMP][ESS]";
ScanResult input = new ScanResult(WifiSsid.createFromAsciiEncoded(ssid), ssid,
"ab:cd:01:ef:45:89", 1245, 0, caps, -78, 2450, 1025, 22, 33, 20, 0,
@@ -231,8 +231,8 @@ public class ScanResultUtilTest extends WifiBaseTest {
@Test
public void testFilsSha384AkmSupportedNetwork() {
final String ssid = "FILS-AP";
- String caps = "[WPA2-EAP+EAP-SHA384+FILS-SHA384-CCMP]"
- + "[RSN-EAP+EAP-SHA384+FILS-SHA384-CCMP][ESS]";
+ String caps = "[WPA2-EAP+EAP-SHA384+EAP-FILS-SHA384-CCMP]"
+ + "[RSN-EAP+EAP-SHA384+EAP-FILS-SHA384-CCMP][ESS]";
ScanResult input = new ScanResult(WifiSsid.createFromAsciiEncoded(ssid), ssid,
"ab:cd:01:ef:45:89", 1245, 0, caps, -78, 2450, 1025, 22, 33, 20, 0,