summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--WifiDialog/AndroidManifest.xml1
-rw-r--r--WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java16
-rw-r--r--framework/java/android/net/wifi/WifiConfiguration.java11
-rw-r--r--framework/java/android/net/wifi/WifiEnterpriseConfig.java15
-rw-r--r--framework/java/android/net/wifi/WifiInfo.java4
-rw-r--r--framework/java/android/net/wifi/hotspot2/PasspointConfiguration.java38
-rw-r--r--framework/tests/src/android/net/wifi/WifiConfigurationTest.java15
-rw-r--r--framework/tests/src/android/net/wifi/WifiInfoTest.java6
-rw-r--r--framework/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java7
-rw-r--r--service/ServiceWifiResources/res/values-af/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-am/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ar/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-as/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-az/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-be/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-bg/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-bn/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-bs/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ca/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-cs/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-da/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-de/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-el/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-en-rAU/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-en-rCA/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-en-rGB/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-en-rIN/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-en-rXC/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-es-rUS/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-es/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-et/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-eu/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-fa/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-fi/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-fr-rCA/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-fr/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-gl/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-gu/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-hi/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-hr/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-hu/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-hy/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-in/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-is/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-it/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-iw/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ja/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ka/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-kk/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-km/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-kn/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ko/strings.xml6
-rw-r--r--service/ServiceWifiResources/res/values-ky/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-lo/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-lt/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-lv/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-mk/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ml/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-mn/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-mr/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ms/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-my/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-nb/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ne/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-nl/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-or/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-pa/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-pl/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-pt-rBR/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-pt-rPT/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-pt/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ro/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ru/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-si/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-sk/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-sl/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-sq/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-sr/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-sv/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-sw/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ta/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-te/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-th/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-tl/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-tr/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-uk/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-ur/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-uz/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-vi/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-zh-rCN/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-zh-rHK/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-zh-rTW/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values-zu/strings.xml4
-rw-r--r--service/ServiceWifiResources/res/values/config.xml7
-rw-r--r--service/ServiceWifiResources/res/values/overlayable.xml1
-rw-r--r--service/java/com/android/server/wifi/CertificateEventInfo.java63
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java16
-rw-r--r--service/java/com/android/server/wifi/DppManager.java17
-rw-r--r--service/java/com/android/server/wifi/InsecureEapNetworkHandler.java64
-rw-r--r--service/java/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImpl.java3
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java18
-rw-r--r--service/java/com/android/server/wifi/WifiCountryCode.java28
-rw-r--r--service/java/com/android/server/wifi/WifiMetrics.java37
-rw-r--r--service/java/com/android/server/wifi/WifiMonitor.java11
-rw-r--r--service/java/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponse.java12
-rw-r--r--service/java/com/android/server/wifi/hotspot2/PasspointManager.java15
-rw-r--r--service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java36
-rw-r--r--service/java/com/android/server/wifi/util/InformationElementUtil.java20
-rw-r--r--service/tests/wifitests/Android.bp3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/CertificateEventInfoTest.java58
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java8
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/InsecureEapNetworkHandlerTest.java166
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionStoreDataTest.java5
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/QosPolicyRequestHandlerTest.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/ScanDetailCacheTest.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImplTest.java12
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiBlocklistMonitorTest.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoStoreManagerDataTest.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java48
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiCountryCodeTest.java61
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java42
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java13
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java5
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiPseudonymManagerTest.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiThreadRunnerTest.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/entitlement/CarrierSpecificServiceEntitlementTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/entitlement/http/HttpClientTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/entitlement/http/StreamUtilsTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponseTest.java28
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceAidlImplTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceHidlImplTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipAidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipHidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalAidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalHidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceAidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceHidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiP2pIfaceTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerAidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerHidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceAidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceHidlImplTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java110
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkNominateHelperTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/p2p/MockWifiP2pMonitor.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java3
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java32
156 files changed, 1099 insertions, 392 deletions
diff --git a/WifiDialog/AndroidManifest.xml b/WifiDialog/AndroidManifest.xml
index dfeafabda0..e9bb936840 100644
--- a/WifiDialog/AndroidManifest.xml
+++ b/WifiDialog/AndroidManifest.xml
@@ -19,6 +19,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.wifi.dialog">
<uses-permission android:name="android.permission.VIBRATE"/>
+ <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/>
<queries>
<intent>
<action android:name="com.android.server.wifi.intent.action.SERVICE_WIFI_RESOURCES_APK" />
diff --git a/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java b/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java
index 3c4a0f2d4c..2275dd7e78 100644
--- a/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java
+++ b/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java
@@ -62,6 +62,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.os.BuildCompat;
import java.util.ArrayList;
import java.util.List;
@@ -255,6 +256,13 @@ public class WifiDialogActivity extends Activity {
protected void onStop() {
super.onStop();
if (!isChangingConfigurations()) {
+ if (!BuildCompat.isAtLeastU()) {
+ // Before U, we don't have INTERNAL_SYSTEM_WINDOW permission to always show at the
+ // top, so close all dialogs when we're not visible anymore.
+ for (int i = 0; i < mActiveDialogsPerId.size(); i++) {
+ mActiveDialogsPerId.get(i).cancel();
+ }
+ }
return;
}
// If we're stopping due to a configuration change, dismiss all the dialogs without
@@ -378,7 +386,9 @@ public class WifiDialogActivity extends Activity {
if (mGravity != Gravity.NO_GRAVITY) {
dialog.getWindow().setGravity(mGravity);
}
- dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
+ if (BuildCompat.isAtLeastU()) {
+ dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
+ }
mActiveDialogsPerId.put(dialogId, dialog);
long timeoutMs = intent.getLongExtra(WifiManager.EXTRA_DIALOG_TIMEOUT_MS, 0);
if (timeoutMs > 0) {
@@ -690,6 +700,10 @@ public class WifiDialogActivity extends Activity {
}
}
});
+ } else {
+ dialog.setOnShowListener(dialogShow -> {
+ dialog.getButton(Dialog.BUTTON_NEGATIVE).requestFocus();
+ });
}
if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_TYPE_APPLIANCE)
== Configuration.UI_MODE_TYPE_APPLIANCE) {
diff --git a/framework/java/android/net/wifi/WifiConfiguration.java b/framework/java/android/net/wifi/WifiConfiguration.java
index 3ba9346246..1f0a33cf72 100644
--- a/framework/java/android/net/wifi/WifiConfiguration.java
+++ b/framework/java/android/net/wifi/WifiConfiguration.java
@@ -606,7 +606,6 @@ public class WifiConfiguration implements Parcelable {
}
// Clear existing data.
mSecurityParamsList.clear();
-
allowedKeyManagement = (BitSet) givenAllowedKeyManagement.clone();
convertLegacyFieldsToSecurityParamsIfNeeded();
}
@@ -699,7 +698,8 @@ public class WifiConfiguration implements Parcelable {
}
private boolean isWpa3EnterpriseConfiguration() {
- if (!allowedKeyManagement.get(KeyMgmt.WPA_EAP)
+ if (!allowedKeyManagement.get(KeyMgmt.WPA_EAP_SHA256)
+ && !allowedKeyManagement.get(KeyMgmt.WPA_EAP)
&& !allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
return false;
}
@@ -719,7 +719,6 @@ public class WifiConfiguration implements Parcelable {
*/
public void convertLegacyFieldsToSecurityParamsIfNeeded() {
if (!mSecurityParamsList.isEmpty()) return;
-
if (allowedKeyManagement.get(KeyMgmt.WAPI_CERT)) {
setSecurityParams(SECURITY_TYPE_WAPI_CERT);
} else if (allowedKeyManagement.get(KeyMgmt.WAPI_PSK)) {
@@ -734,9 +733,11 @@ public class WifiConfiguration implements Parcelable {
setSecurityParams(SECURITY_TYPE_SAE);
} else if (allowedKeyManagement.get(KeyMgmt.OSEN)) {
setSecurityParams(SECURITY_TYPE_OSEN);
- } else if (allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) {
+ } else if (allowedKeyManagement.get(KeyMgmt.WPA2_PSK)
+ || allowedKeyManagement.get(KeyMgmt.WPA_PSK_SHA256)) {
setSecurityParams(SECURITY_TYPE_PSK);
- } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) {
+ } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)
+ || allowedKeyManagement.get(KeyMgmt.WPA_EAP_SHA256)) {
if (isWpa3EnterpriseConfiguration()) {
setSecurityParams(SECURITY_TYPE_EAP_WPA3_ENTERPRISE);
} else {
diff --git a/framework/java/android/net/wifi/WifiEnterpriseConfig.java b/framework/java/android/net/wifi/WifiEnterpriseConfig.java
index 5a3405e49c..4d60f5d223 100644
--- a/framework/java/android/net/wifi/WifiEnterpriseConfig.java
+++ b/framework/java/android/net/wifi/WifiEnterpriseConfig.java
@@ -126,6 +126,11 @@ public class WifiEnterpriseConfig implements Parcelable {
public static final String KEYSTORES_URI = "keystores://";
/**
+ * String representing a SHA-256 certificate hash used for wpa_supplicant.
+ */
+ private static final String CERT_HASH_PREFIX = "hash://server/sha256/";
+
+ /**
* String to set the engine value to when it should be enabled.
* @hide
*/
@@ -748,6 +753,16 @@ public class WifiEnterpriseConfig implements Parcelable {
}
/**
+ * Set a server certificate hash instead of a CA certificate for a TOFU connection
+ *
+ * @param certHash Server certificate hash to match against in subsequent connections
+ * @hide
+ */
+ public void setServerCertificateHash(String certHash) {
+ setFieldValue(CA_CERT_KEY, certHash, CERT_HASH_PREFIX);
+ }
+
+ /**
* Set CA certificate alias.
*
* <p> See the {@link android.security.KeyChain} for details on installing or choosing
diff --git a/framework/java/android/net/wifi/WifiInfo.java b/framework/java/android/net/wifi/WifiInfo.java
index fde08fc594..ef38163e07 100644
--- a/framework/java/android/net/wifi/WifiInfo.java
+++ b/framework/java/android/net/wifi/WifiInfo.java
@@ -604,8 +604,8 @@ public class WifiInfo implements TransportInfo, Parcelable {
mOemPaid = source.mOemPaid;
mOemPrivate = source.mOemPrivate;
mCarrierMerged = source.mCarrierMerged;
- mRequestingPackageName =
- source.mRequestingPackageName;
+ mRequestingPackageName = shouldRedactNetworkSettingsFields(redactions) ? null
+ : source.mRequestingPackageName;
mOsuAp = source.mOsuAp;
mFqdn = shouldRedactLocationSensitiveFields(redactions)
? null : source.mFqdn;
diff --git a/framework/java/android/net/wifi/hotspot2/PasspointConfiguration.java b/framework/java/android/net/wifi/hotspot2/PasspointConfiguration.java
index 60c8133677..f9ebd2bdfb 100644
--- a/framework/java/android/net/wifi/hotspot2/PasspointConfiguration.java
+++ b/framework/java/android/net/wifi/hotspot2/PasspointConfiguration.java
@@ -996,12 +996,12 @@ public final class PasspointConfiguration implements Parcelable {
}
String[] decoratedIdentityPrefixArray = mDecoratedIdentityPrefix.split("!");
if (decoratedIdentityPrefixArray.length > MAX_NUMBER_OF_ENTRIES) {
- Log.d(TAG, "too many decoratedIdentityPrefix");
+ Log.e(TAG, "too many decoratedIdentityPrefix");
return false;
}
for (String prefix : decoratedIdentityPrefixArray) {
if (prefix.length() > MAX_STRING_LENGTH) {
- Log.d(TAG, "The decoratedIdentityPrefix is too long: " + prefix);
+ Log.e(TAG, "The decoratedIdentityPrefix is too long: " + prefix);
return false;
}
}
@@ -1009,52 +1009,70 @@ public final class PasspointConfiguration implements Parcelable {
if (mAaaServerTrustedNames != null) {
if (mAaaServerTrustedNames.length > MAX_NUMBER_OF_ENTRIES) {
- Log.d(TAG, "Too many AaaServerTrustedNames");
+ Log.e(TAG, "Too many AaaServerTrustedNames");
return false;
}
for (String fqdn : mAaaServerTrustedNames) {
if (fqdn.getBytes(StandardCharsets.UTF_8).length > MAX_STRING_LENGTH) {
- Log.d(TAG, "AaaServerTrustedNames is too long");
+ Log.e(TAG, "AaaServerTrustedNames is too long");
return false;
}
}
}
if (mSubscriptionType != null) {
if (mSubscriptionType.getBytes(StandardCharsets.UTF_8).length > MAX_STRING_LENGTH) {
- Log.d(TAG, "SubscriptionType is too long");
+ Log.e(TAG, "SubscriptionType is too long");
return false;
}
}
if (mTrustRootCertList != null) {
if (mTrustRootCertList.size() > MAX_NUMBER_OF_ENTRIES) {
- Log.d(TAG, "Too many TrustRootCert");
+ Log.e(TAG, "Too many TrustRootCert");
return false;
}
for (Map.Entry<String, byte[]> entry : mTrustRootCertList.entrySet()) {
String url = entry.getKey();
byte[] certFingerprint = entry.getValue();
if (TextUtils.isEmpty(url)) {
- Log.d(TAG, "Empty URL");
+ Log.e(TAG, "Empty URL");
return false;
}
if (url.getBytes(StandardCharsets.UTF_8).length > MAX_URL_BYTES) {
- Log.d(TAG, "URL bytes exceeded the max: "
+ Log.e(TAG, "URL bytes exceeded the max: "
+ url.getBytes(StandardCharsets.UTF_8).length);
return false;
}
if (certFingerprint == null) {
- Log.d(TAG, "Fingerprint not specified");
+ Log.e(TAG, "Fingerprint not specified");
return false;
}
if (certFingerprint.length != CERTIFICATE_SHA256_BYTES) {
- Log.d(TAG, "Incorrect size of trust root certificate SHA-256 fingerprint: "
+ Log.e(TAG, "Incorrect size of trust root certificate SHA-256 fingerprint: "
+ certFingerprint.length);
return false;
}
}
}
+
+ if (mServiceFriendlyNames != null) {
+ if (mServiceFriendlyNames.size() > MAX_NUMBER_OF_ENTRIES) {
+ Log.e(TAG, "ServiceFriendlyNames exceed the max!");
+ return false;
+ }
+ for (Map.Entry<String, String> names : mServiceFriendlyNames.entrySet()) {
+ if (names.getKey() == null || names.getValue() == null) {
+ Log.e(TAG, "Service friendly name entry should not be null");
+ return false;
+ }
+ if (names.getKey().length() > MAX_STRING_LENGTH
+ || names.getValue().length() > MAX_STRING_LENGTH) {
+ Log.e(TAG, "Service friendly name is to long");
+ return false;
+ }
+ }
+ }
return true;
}
diff --git a/framework/tests/src/android/net/wifi/WifiConfigurationTest.java b/framework/tests/src/android/net/wifi/WifiConfigurationTest.java
index b9bd09a537..04a6a1ffdb 100644
--- a/framework/tests/src/android/net/wifi/WifiConfigurationTest.java
+++ b/framework/tests/src/android/net/wifi/WifiConfigurationTest.java
@@ -1197,16 +1197,17 @@ public class WifiConfigurationTest {
@Test
public void testLegacyConfigurationConversion() {
Pair[] keyMgmtSecurityTypePairs = new Pair[] {
- new Pair<>(KeyMgmt.WAPI_CERT, SECURITY_TYPE_WAPI_CERT),
- new Pair<>(KeyMgmt.WAPI_PSK, SECURITY_TYPE_WAPI_PSK),
- new Pair<>(KeyMgmt.SUITE_B_192, SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT),
+ new Pair<>(KeyMgmt.NONE, SECURITY_TYPE_OPEN),
new Pair<>(KeyMgmt.OWE, SECURITY_TYPE_OWE),
- new Pair<>(KeyMgmt.SAE, SECURITY_TYPE_SAE),
new Pair<>(KeyMgmt.OSEN, SECURITY_TYPE_OSEN),
+ new Pair<>(KeyMgmt.WPA_PSK, SECURITY_TYPE_PSK),
new Pair<>(KeyMgmt.WPA2_PSK, SECURITY_TYPE_PSK),
+ new Pair<>(KeyMgmt.WPA_PSK_SHA256, SECURITY_TYPE_PSK),
+ new Pair<>(KeyMgmt.SAE, SECURITY_TYPE_SAE),
new Pair<>(KeyMgmt.WPA_EAP, SECURITY_TYPE_EAP),
- new Pair<>(KeyMgmt.WPA_PSK, SECURITY_TYPE_PSK),
- new Pair<>(KeyMgmt.NONE, SECURITY_TYPE_OPEN),
+ new Pair<>(KeyMgmt.SUITE_B_192, SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT),
+ new Pair<>(KeyMgmt.WAPI_CERT, SECURITY_TYPE_WAPI_CERT),
+ new Pair<>(KeyMgmt.WAPI_PSK, SECURITY_TYPE_WAPI_PSK),
};
for (Pair pair: keyMgmtSecurityTypePairs) {
@@ -1223,7 +1224,7 @@ public class WifiConfigurationTest {
// If EAP key management is set and requirePmf is true, it is WPA3 Enterprise.
WifiConfiguration wpa3EnterpriseConfig = new WifiConfiguration();
- wpa3EnterpriseConfig.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
+ wpa3EnterpriseConfig.allowedKeyManagement.set(KeyMgmt.WPA_EAP_SHA256);
wpa3EnterpriseConfig.requirePmf = true;
wpa3EnterpriseConfig.allowedProtocols.set(Protocol.RSN);
wpa3EnterpriseConfig.convertLegacyFieldsToSecurityParamsIfNeeded();
diff --git a/framework/tests/src/android/net/wifi/WifiInfoTest.java b/framework/tests/src/android/net/wifi/WifiInfoTest.java
index e881ecead9..4807beca56 100644
--- a/framework/tests/src/android/net/wifi/WifiInfoTest.java
+++ b/framework/tests/src/android/net/wifi/WifiInfoTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;
@@ -384,9 +385,14 @@ public class WifiInfoTest {
WifiInfo writeWifiInfo = new WifiInfo();
writeWifiInfo.setIsPrimary(true);
+ writeWifiInfo.setRequestingPackageName(TEST_PACKAGE_NAME);
+ writeWifiInfo.setIsPrimary(true);
+ assertTrue(writeWifiInfo.isPrimary());
WifiInfo redactedWifiInfo =
writeWifiInfo.makeCopy(NetworkCapabilities.REDACT_FOR_NETWORK_SETTINGS);
+ assertNull(redactedWifiInfo.getRequestingPackageName());
+ assertThrows(SecurityException.class, () -> redactedWifiInfo.isPrimary());
Parcel parcel = Parcel.obtain();
redactedWifiInfo.writeToParcel(parcel, 0);
diff --git a/framework/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java b/framework/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java
index 8318de3354..4d80cf4337 100644
--- a/framework/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java
+++ b/framework/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java
@@ -741,5 +741,12 @@ public class PasspointConfigurationTest {
homeSp.setRoamingConsortiumOis(ois);
assertFalse(homeSp.validate());
homeSp.setRoamingConsortiumOis(null);
+ // ServiceFriendlyNames exceed the limit
+ HashMap<String, String> friendlyNames = new HashMap<>();
+ for (int i = 0; i < MAX_NUMBER_OF_ENTRIES + 1; i++) {
+ friendlyNames.put(String.valueOf(i), String.valueOf(i));
+ }
+ passpointConfiguration.setServiceFriendlyNames(friendlyNames);
+ assertFalse(passpointConfiguration.validate());
}
}
diff --git a/service/ServiceWifiResources/res/values-af/strings.xml b/service/ServiceWifiResources/res/values-af/strings.xml
index fb45e3de50..18b4316083 100644
--- a/service/ServiceWifiResources/res/values-af/strings.xml
+++ b/service/ServiceWifiResources/res/values-af/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Netwerk is onbeskikbaar"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is deur jou administrateur gedeaktiveer."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Maak toe"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Skakel tussen wi-fi-netwerke oor?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Dit lyk nie of <xliff:g id="SSID_0">%1$s</xliff:g> aan die internet gekoppel is nie. Skakel oor na <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Skakel oor"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Moenie oorskakel nie"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-am/strings.xml b/service/ServiceWifiResources/res/values-am/strings.xml
index 743668a378..17249603a5 100644
--- a/service/ServiceWifiResources/res/values-am/strings.xml
+++ b/service/ServiceWifiResources/res/values-am/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"የማይገኝ አውታረ መረብ"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> በእርስዎ አስተዳዳሪ ተሰናክሏል።"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ዝጋ"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"የWi-Fi አውታረ መረቦች ይቀየሩ?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ከበይነመረቡ ጋር የተገናኘ አይመስልም። ወደ <xliff:g id="SSID_1">%2$s</xliff:g> ይቀየር?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"ቀይር"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"አትቀይር"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ar/strings.xml b/service/ServiceWifiResources/res/values-ar/strings.xml
index b7182b3434..8e40702570 100644
--- a/service/ServiceWifiResources/res/values-ar/strings.xml
+++ b/service/ServiceWifiResources/res/values-ar/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"شبكة غير متوفّرة"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"تم إيقاف معرّف <xliff:g id="SSID">%1$s</xliff:g> من قِبل المشرف."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"إغلاق"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"‏هل تريد تبديل شبكات Wi-Fi؟"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"يبدو أنّ شبكة \"<xliff:g id="SSID_0">%1$s</xliff:g>\" غير متصلة بالإنترنت. هل تريد التبديل إلى \"<xliff:g id="SSID_1">%2$s</xliff:g>\"؟"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"تبديل"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"عدم التبديل"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-as/strings.xml b/service/ServiceWifiResources/res/values-as/strings.xml
index 5b65653934..19e870804d 100644
--- a/service/ServiceWifiResources/res/values-as/strings.xml
+++ b/service/ServiceWifiResources/res/values-as/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"উপলব্ধ নোহোৱা নেটৱৰ্ক"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"আপোনাৰ প্ৰশাসকে <xliff:g id="SSID">%1$s</xliff:g> অক্ষম কৰিছে।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"বন্ধ কৰক"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"ৱাই-ফাই নেটৱৰ্ক সলনি কৰিবনে?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ইণ্টাৰনেটৰ সৈতে সংযুক্ত হৈ থকা যেন লগা নাই। <xliff:g id="SSID_1">%2$s</xliff:g>লৈ সলনি কৰিবনে?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"সলনি কৰক"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"সলনি নকৰিব"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-az/strings.xml b/service/ServiceWifiResources/res/values-az/strings.xml
index d1b8dfd6dd..f4f30a2216 100644
--- a/service/ServiceWifiResources/res/values-az/strings.xml
+++ b/service/ServiceWifiResources/res/values-az/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Əlçatan Şəbəkə"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> administratorunuz tərəfindən deaktiv edilib."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Bağlayın"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi‑Fi şəbəkələri dəyişilsin?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> internetə qoşulmayıb. <xliff:g id="SSID_1">%2$s</xliff:g> şəbəkəsinə dəyişilsin?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Dəyişin"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Dəyişməyin"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml b/service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml
index fe24540585..1f9aabbfdb 100644
--- a/service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml
+++ b/service/ServiceWifiResources/res/values-b+sr+Latn/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Nedostupna mreža"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administrator je onemogućio <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zatvori"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Želite da promenite WiFi mrežu?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Izgleda da mreža <xliff:g id="SSID_0">%1$s</xliff:g> nije povezana na internet. Želite da prebacite na mrežu <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Prebaci"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ne prebacuj"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-be/strings.xml b/service/ServiceWifiResources/res/values-be/strings.xml
index 9f161a0b92..2e3304e1e8 100644
--- a/service/ServiceWifiResources/res/values-be/strings.xml
+++ b/service/ServiceWifiResources/res/values-be/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Недаступная сетка"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Сетка \"<xliff:g id="SSID">%1$s</xliff:g>\" адключана вашым адміністратарам."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Закрыць"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Пераключыцца на іншую сетку Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Хутчэй за ўсё, сетка \"<xliff:g id="SSID_0">%1$s</xliff:g>\" не падключана да інтэрнэту. Пераключыцца на сетку \"<xliff:g id="SSID_1">%2$s</xliff:g>\"?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Пераключыцца"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Не пераключацца"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-bg/strings.xml b/service/ServiceWifiResources/res/values-bg/strings.xml
index ea72a89000..a84800633a 100644
--- a/service/ServiceWifiResources/res/values-bg/strings.xml
+++ b/service/ServiceWifiResources/res/values-bg/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Няма достъп до мрежата"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Функцията <xliff:g id="SSID">%1$s</xliff:g> е деактивирана от администратора ви."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Затваряне"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Да се превключат ли Wi‑Fi мрежите?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Изглежда, че <xliff:g id="SSID_0">%1$s</xliff:g> няма връзка с интернет. Да се превключи ли към <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Превключване"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Без превключване"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-bn/strings.xml b/service/ServiceWifiResources/res/values-bn/strings.xml
index 8b36f732b7..13687d4992 100644
--- a/service/ServiceWifiResources/res/values-bn/strings.xml
+++ b/service/ServiceWifiResources/res/values-bn/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"নেটওয়ার্ক উপলভ্য নয়"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"আপনার অ্যাডমিনিস্ট্রেটর <xliff:g id="SSID">%1$s</xliff:g> বন্ধ করে দিয়েছেন।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"বন্ধ করুন"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"ওয়াই-ফাই নেটওয়ার্ক পাল্টাবেন?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ইন্টারনেটের সাথে কানেক্ট করা নেই। <xliff:g id="SSID_1">%2$s</xliff:g>-এ পাল্টাবেন?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"পাল্টান"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"পাল্টাতে চাই না"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-bs/strings.xml b/service/ServiceWifiResources/res/values-bs/strings.xml
index 08527b5bae..11b1ac1278 100644
--- a/service/ServiceWifiResources/res/values-bs/strings.xml
+++ b/service/ServiceWifiResources/res/values-bs/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Nedostupna mreža"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administrator je onemogućio <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zatvori"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Promijeniti WiFi mrežu?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Izgleda da mreža <xliff:g id="SSID_0">%1$s</xliff:g> nije povezana s internetom. Prebaciti na mrežu <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Prebaci"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Nemoj prebaciti"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ca/strings.xml b/service/ServiceWifiResources/res/values-ca/strings.xml
index 710e0d1955..20d51762bc 100644
--- a/service/ServiceWifiResources/res/values-ca/strings.xml
+++ b/service/ServiceWifiResources/res/values-ca/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Xarxa no disponible"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"L\'administrador ha desactivat <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Tanca"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Vols canviar de xarxa Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Sembla que <xliff:g id="SSID_0">%1$s</xliff:g> no té connexió a Internet. Vols canviar a <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Canvia"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"No canviïs"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-cs/strings.xml b/service/ServiceWifiResources/res/values-cs/strings.xml
index 3990ad5b87..26f2d6d5f7 100644
--- a/service/ServiceWifiResources/res/values-cs/strings.xml
+++ b/service/ServiceWifiResources/res/values-cs/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Nedostupná síť"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Funkce <xliff:g id="SSID">%1$s</xliff:g> byla deaktivována administrátorem."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zavřít"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Přepnout sítě Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Zdá se, že síť <xliff:g id="SSID_0">%1$s</xliff:g> není připojena k internetu. Přepnout na síť <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Přepnout"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Nepřepínat"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-da/strings.xml b/service/ServiceWifiResources/res/values-da/strings.xml
index 7827e8aa9f..8b2516676f 100644
--- a/service/ServiceWifiResources/res/values-da/strings.xml
+++ b/service/ServiceWifiResources/res/values-da/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Utilgængeligt netværk"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> er blevet deaktiveret af din administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Luk"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Vil du skifte Wi-Fi-netværk?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> lader ikke til at have forbindelse til internettet. Vil du skifte til <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Skift"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Skift ikke"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-de/strings.xml b/service/ServiceWifiResources/res/values-de/strings.xml
index d3a623d54d..7e3f2d6257 100644
--- a/service/ServiceWifiResources/res/values-de/strings.xml
+++ b/service/ServiceWifiResources/res/values-de/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Nicht verfügbares Netzwerk"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Die Funktion „<xliff:g id="SSID">%1$s</xliff:g>“ wurde von deinem Administrator deaktiviert."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Schließen"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"WLAN wechseln?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ist anscheinend nicht mit dem Internet verbunden. Zu <xliff:g id="SSID_1">%2$s</xliff:g> wechseln?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Wechseln"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Nicht wechseln"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-el/strings.xml b/service/ServiceWifiResources/res/values-el/strings.xml
index 03a5cb2f32..8d0408b99a 100644
--- a/service/ServiceWifiResources/res/values-el/strings.xml
+++ b/service/ServiceWifiResources/res/values-el/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Μη διαθέσιμο δίκτυο"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Το <xliff:g id="SSID">%1$s</xliff:g> έχει απενεργοποιηθεί από τον διαχειριστή σας."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Κλείσιμο"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Εναλλαγή δικτύων Wi‑Fi;"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Το <xliff:g id="SSID_0">%1$s</xliff:g> φαίνεται ότι δεν είναι συνδεδεμένο στο διαδίκτυο. Εναλλαγή σε <xliff:g id="SSID_1">%2$s</xliff:g>;"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Εναλλαγή"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Να μην γίνει εναλλαγή"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rAU/strings.xml b/service/ServiceWifiResources/res/values-en-rAU/strings.xml
index b5b21d09fd..ae7aa19a81 100644
--- a/service/ServiceWifiResources/res/values-en-rAU/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rAU/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Unavailable network"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is disabled by your administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Close"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Switch Wi‑Fi networks?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> does not appear to be connected to the Internet. Switch to <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Switch"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Don\'t switch"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rCA/strings.xml b/service/ServiceWifiResources/res/values-en-rCA/strings.xml
index b1fa03c97e..72fe89b77d 100644
--- a/service/ServiceWifiResources/res/values-en-rCA/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rCA/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Unavailable Network"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is disabled by your administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Close"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Switch Wi‑Fi networks?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> does not appear to be connected to the internet. Switch to <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Switch"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Don\'t switch"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rGB/strings.xml b/service/ServiceWifiResources/res/values-en-rGB/strings.xml
index b5b21d09fd..ae7aa19a81 100644
--- a/service/ServiceWifiResources/res/values-en-rGB/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rGB/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Unavailable network"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is disabled by your administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Close"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Switch Wi‑Fi networks?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> does not appear to be connected to the Internet. Switch to <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Switch"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Don\'t switch"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rIN/strings.xml b/service/ServiceWifiResources/res/values-en-rIN/strings.xml
index b5b21d09fd..ae7aa19a81 100644
--- a/service/ServiceWifiResources/res/values-en-rIN/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rIN/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Unavailable network"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is disabled by your administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Close"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Switch Wi‑Fi networks?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> does not appear to be connected to the Internet. Switch to <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Switch"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Don\'t switch"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-en-rXC/strings.xml b/service/ServiceWifiResources/res/values-en-rXC/strings.xml
index 90a6b13c1b..3df2c31cca 100644
--- a/service/ServiceWifiResources/res/values-en-rXC/strings.xml
+++ b/service/ServiceWifiResources/res/values-en-rXC/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎Unavailable Network‎‏‎‎‏‎"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is disabled by your administrator.‎‏‎‎‏‎"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎Close‎‏‎‎‏‎"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‎Switch Wi‑Fi networks?‎‏‎‎‏‎"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="SSID_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎ does not appear to be connected to the internet. Switch to ‎‏‎‎‏‏‎<xliff:g id="SSID_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎Switch‎‏‎‎‏‎"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎Don\'t switch‎‏‎‎‏‎"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-es-rUS/strings.xml b/service/ServiceWifiResources/res/values-es-rUS/strings.xml
index 67bacd1ea4..1bc4f0099c 100644
--- a/service/ServiceWifiResources/res/values-es-rUS/strings.xml
+++ b/service/ServiceWifiResources/res/values-es-rUS/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Red no disponible"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Tu administrador inhabilitó <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Cerrar"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"¿Quieres cambiar de red Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Al parecer, <xliff:g id="SSID_0">%1$s</xliff:g> no tiene conexión a Internet. ¿Quieres cambiar a <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Cambiar"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"No cambiar"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-es/strings.xml b/service/ServiceWifiResources/res/values-es/strings.xml
index 258ec25a3b..6b375887de 100644
--- a/service/ServiceWifiResources/res/values-es/strings.xml
+++ b/service/ServiceWifiResources/res/values-es/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Red no disponible"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Tu administrador ha inhabilitado <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Cerrar"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"¿Cambiar de red Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Parece que <xliff:g id="SSID_0">%1$s</xliff:g> no tiene conexión a Internet. ¿Cambiar a <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Cambiar"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"No cambiar"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-et/strings.xml b/service/ServiceWifiResources/res/values-et/strings.xml
index 30bee54162..9519d7ba31 100644
--- a/service/ServiceWifiResources/res/values-et/strings.xml
+++ b/service/ServiceWifiResources/res/values-et/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Võrk ei ole saadaval"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administraator on funktsiooni <xliff:g id="SSID">%1$s</xliff:g> keelanud."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Sule"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Kas soovite vahetada WiFi-võrku?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ei näi olevat Internetiga ühendatud. Kas soovite aktiveerida operaatori <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Vaheta"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ära vaheta"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-eu/strings.xml b/service/ServiceWifiResources/res/values-eu/strings.xml
index 20582085e3..427655fd8d 100644
--- a/service/ServiceWifiResources/res/values-eu/strings.xml
+++ b/service/ServiceWifiResources/res/values-eu/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Sarea ez dago erabilgarri"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administratzaileak desgaitu du <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Itxi"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wifi-sarea aldatu nahi duzu?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ez dago konektatuta Internetera. <xliff:g id="SSID_1">%2$s</xliff:g> sarera aldatu nahi duzu?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Bai, aldatu nahi dut"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ez, ez dut aldatu nahi"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-fa/strings.xml b/service/ServiceWifiResources/res/values-fa/strings.xml
index 3cd54bef39..037e6d7e17 100644
--- a/service/ServiceWifiResources/res/values-fa/strings.xml
+++ b/service/ServiceWifiResources/res/values-fa/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"شبکه غیرقابل‌دسترس"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"سرپرست شما <xliff:g id="SSID">%1$s</xliff:g> را غیرفعال کرده است."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"بستن"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"‏شبکه‌های Wi-Fi جابه‌جا شود؟"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"ظاهراً <xliff:g id="SSID_0">%1$s</xliff:g> به اینترنت متصل نیست. به <xliff:g id="SSID_1">%2$s</xliff:g> جابه‌جا شوید؟"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"جابه‌جا شود"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"جابه‌جا نشود"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-fi/strings.xml b/service/ServiceWifiResources/res/values-fi/strings.xml
index 6243bd1591..0b61a9c746 100644
--- a/service/ServiceWifiResources/res/values-fi/strings.xml
+++ b/service/ServiceWifiResources/res/values-fi/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Verkko ei ole käytettävissä"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> on järjestelmänvalvojan käytöstä poistama."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Sulje"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Vaihdetaanko Wi-Fi-verkkoja?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ei näytä olevan yhteydessä internetiin. Otetaanko <xliff:g id="SSID_1">%2$s</xliff:g> käyttöön?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Vaihda"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Älä vaihda"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-fr-rCA/strings.xml b/service/ServiceWifiResources/res/values-fr-rCA/strings.xml
index 1a2129185f..7c85fae700 100644
--- a/service/ServiceWifiResources/res/values-fr-rCA/strings.xml
+++ b/service/ServiceWifiResources/res/values-fr-rCA/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Réseau indisponible"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Fonctionnalité <xliff:g id="SSID">%1$s</xliff:g> désactivée par votre administrateur."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fermer"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Changer de réseau Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ne semble pas être connecté à Internet. Passer à <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Changer"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ne pas changer"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-fr/strings.xml b/service/ServiceWifiResources/res/values-fr/strings.xml
index 9fe3ae6988..eb69be7ec4 100644
--- a/service/ServiceWifiResources/res/values-fr/strings.xml
+++ b/service/ServiceWifiResources/res/values-fr/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Réseau indisponible"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> est désactivé par votre administrateur."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fermer"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Changer de réseau Wi‑Fi ?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ne semble pas être connecté à Internet. Passer à <xliff:g id="SSID_1">%2$s</xliff:g> ?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Changer"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ne pas changer"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-gl/strings.xml b/service/ServiceWifiResources/res/values-gl/strings.xml
index 5afd2df1c7..63a5745376 100644
--- a/service/ServiceWifiResources/res/values-gl/strings.xml
+++ b/service/ServiceWifiResources/res/values-gl/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Rede non dispoñible"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"O teu administrador desactivou a rede <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Pechar"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Queres cambiar de rede wifi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Parece que <xliff:g id="SSID_0">%1$s</xliff:g> non ten conexión a Internet. Queres cambiar a <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Cambiar"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Non cambiar"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-gu/strings.xml b/service/ServiceWifiResources/res/values-gu/strings.xml
index c62792c2ca..b948216ec4 100644
--- a/service/ServiceWifiResources/res/values-gu/strings.xml
+++ b/service/ServiceWifiResources/res/values-gu/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"નેટવર્ક ઉપલબ્ધ નથી"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>ને તમારા ઍડમિનિસ્ટ્રેટર દ્વારા બંધ કરવામાં આવ્યું છે."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"બંધ કરો"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"વાઇ-ફાઇ નેટવર્ક સ્વિચ કરીએ?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"એવું લાગે છે કે <xliff:g id="SSID_0">%1$s</xliff:g> ઇન્ટરનેટ સાથે કનેક્ટેડ નથી. <xliff:g id="SSID_1">%2$s</xliff:g> પર સ્વિચ કરીએ?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"સ્વિચ કરો"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"સ્વિચ કરશો નહીં"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-hi/strings.xml b/service/ServiceWifiResources/res/values-hi/strings.xml
index 03a3882a0a..9eca5c1f51 100644
--- a/service/ServiceWifiResources/res/values-hi/strings.xml
+++ b/service/ServiceWifiResources/res/values-hi/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"नेटवर्क उपलब्ध नहीं है"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"आपके एडमिन ने <xliff:g id="SSID">%1$s</xliff:g> को बंद किया हुआ है."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"बंद करें"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"क्या आपको वाई-फ़ाई नेटवर्क पर स्विच करना है?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"ऐसा लगता है कि <xliff:g id="SSID_0">%1$s</xliff:g>, इंटरनेट से कनेक्ट नहीं है. क्या आपको <xliff:g id="SSID_1">%2$s</xliff:g> पर स्विच करना है?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"स्विच करें"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"स्विच न करें"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-hr/strings.xml b/service/ServiceWifiResources/res/values-hr/strings.xml
index 35bb518655..bba5fc0da8 100644
--- a/service/ServiceWifiResources/res/values-hr/strings.xml
+++ b/service/ServiceWifiResources/res/values-hr/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Mreža nije dostupna"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Značajku <xliff:g id="SSID">%1$s</xliff:g> onemogućio je vaš administrator."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zatvori"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Želite li promijeniti Wi‑Fi mrežu?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Čini se da mreža <xliff:g id="SSID_0">%1$s</xliff:g> nije povezana s internetom. Želite li se prebaciti na mrežu <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Prebaci"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ne prebacuj"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-hu/strings.xml b/service/ServiceWifiResources/res/values-hu/strings.xml
index 7c15bef5d8..8511a71805 100644
--- a/service/ServiceWifiResources/res/values-hu/strings.xml
+++ b/service/ServiceWifiResources/res/values-hu/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Hozzáférhetetlen hálózat"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> letiltva a rendszergazda által."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Bezárás"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Szeretne Wi‑Fi-hálózatot váltani?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Úgy tűnik, a(z) <xliff:g id="SSID_0">%1$s</xliff:g> nem csatlakozik az internethez. Szeretne a következőre váltani: <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Váltás"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Nincs váltás"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-hy/strings.xml b/service/ServiceWifiResources/res/values-hy/strings.xml
index c311fae934..8d9b518565 100644
--- a/service/ServiceWifiResources/res/values-hy/strings.xml
+++ b/service/ServiceWifiResources/res/values-hy/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Անհասանելի ցանց"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Ադմինիստրատորն անջատել է <xliff:g id="SSID">%1$s</xliff:g> գործառույթը։"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Փակել"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Անցնե՞լ մյուս Wi-Fi ցանցին"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ցանցը կարծես թե միացած չէ ինտերնետին։ Անցնե՞լ <xliff:g id="SSID_1">%2$s</xliff:g> ցանցին։"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Անցնել"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Չանցնել"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-in/strings.xml b/service/ServiceWifiResources/res/values-in/strings.xml
index 9aabfc6fd2..72d47b866c 100644
--- a/service/ServiceWifiResources/res/values-in/strings.xml
+++ b/service/ServiceWifiResources/res/values-in/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Jaringan Tidak Tersedia"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> dinonaktifkan oleh administrator Anda."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Tutup"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Alihkan jaringan Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> tampaknya tidak terhubung ke internet. Alihkan ke <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Alihkan"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Jangan alihkan"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-is/strings.xml b/service/ServiceWifiResources/res/values-is/strings.xml
index 206f829253..71f31cf6c0 100644
--- a/service/ServiceWifiResources/res/values-is/strings.xml
+++ b/service/ServiceWifiResources/res/values-is/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Netkerfi ekki tiltækt"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Stjórnandinn hefur slökkt á <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Loka"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Skipta um WiFi-net?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> virðist ekki vera tengt netinu. Skipta yfir í <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Skipta"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ekki skipta"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-it/strings.xml b/service/ServiceWifiResources/res/values-it/strings.xml
index 486c8d9ae4..f185977cf6 100644
--- a/service/ServiceWifiResources/res/values-it/strings.xml
+++ b/service/ServiceWifiResources/res/values-it/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Rete non disponibile"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"L\'amministratore ha disattivato la funzionalità <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Chiudi"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Cambiare rete Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> non sembra essere connessa a internet. Passare a <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Passa"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Non effettuare il passaggio"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-iw/strings.xml b/service/ServiceWifiResources/res/values-iw/strings.xml
index 84023edbe1..daa157156e 100644
--- a/service/ServiceWifiResources/res/values-iw/strings.xml
+++ b/service/ServiceWifiResources/res/values-iw/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"רשת לא זמינה"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"האדמין השבית את <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"סגירה"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"‏להחליף בין רשתות ה-Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"נראה ש<xliff:g id="SSID_0">%1$s</xliff:g> לא מחובר לאינטרנט. לעבור ל<xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"מעבר"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"לא לעבור"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ja/strings.xml b/service/ServiceWifiResources/res/values-ja/strings.xml
index 6f884310b7..37ce2b8abd 100644
--- a/service/ServiceWifiResources/res/values-ja/strings.xml
+++ b/service/ServiceWifiResources/res/values-ja/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"使用できないネットワーク"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> は管理者によって無効にされています。"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"閉じる"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi-Fi ネットワークに切り替えますか?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> がインターネットに接続できないようです。<xliff:g id="SSID_1">%2$s</xliff:g> に切り替えますか?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"切り替える"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"切り替えない"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ka/strings.xml b/service/ServiceWifiResources/res/values-ka/strings.xml
index ec25e223c9..253635cc16 100644
--- a/service/ServiceWifiResources/res/values-ka/strings.xml
+++ b/service/ServiceWifiResources/res/values-ka/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"ქსელი მიუწვდომელია"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> გათიშულია თქვენი ადმინისტრატორის მიერ."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"დახურვა"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"გსურთ Wi‑Fi ქსელების გადართვა?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"სავარაუდოდ, <xliff:g id="SSID_0">%1$s</xliff:g> არ არის ინტერნეტთან დაკავშირებული. გსურთ <xliff:g id="SSID_1">%2$s</xliff:g>-ზე გადართვა?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"გადართვა"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"არ გადაირთოს"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-kk/strings.xml b/service/ServiceWifiResources/res/values-kk/strings.xml
index cb53d653f5..28767d214a 100644
--- a/service/ServiceWifiResources/res/values-kk/strings.xml
+++ b/service/ServiceWifiResources/res/values-kk/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Қолжетімсіз желі"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> әкімші тарапынан өшірілді."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Жабу"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi‑Fi желілерін ауыстыру керек пе?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> интернетке қосылмаған сияқты. <xliff:g id="SSID_1">%2$s</xliff:g> желісіне ауысу керек пе?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Ауысу"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ауыспау"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-km/strings.xml b/service/ServiceWifiResources/res/values-km/strings.xml
index 83721c7cdd..ba062433a8 100644
--- a/service/ServiceWifiResources/res/values-km/strings.xml
+++ b/service/ServiceWifiResources/res/values-km/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"បណ្ដាញ​មិន​អាច​ប្រើ​បាន"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> ត្រូវបានបិទ​ដោយអ្នកគ្រប់គ្រង​របស់អ្នក។"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"បិទ"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"ប្ដូរបណ្ដាញ Wi‑Fi ឬ?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ហាក់ដូចជាមិនបានភ្ជាប់អ៊ីនធឺណិតទេ។ ប្ដូរទៅ <xliff:g id="SSID_1">%2$s</xliff:g> ឬ?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"ប្ដូរ"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"កុំ​ប្ដូរ"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-kn/strings.xml b/service/ServiceWifiResources/res/values-kn/strings.xml
index 550bd50ac3..7d852548fe 100644
--- a/service/ServiceWifiResources/res/values-kn/strings.xml
+++ b/service/ServiceWifiResources/res/values-kn/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"ನೆಟ್‌ವರ್ಕ್ ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> ಅನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ಮುಚ್ಚಿರಿ"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ಬದಲಿಸಬೇಕೆ?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ಇಂಟರ್ನೆಟ್‌ಗೆ ಕನೆಕ್ಟ್ ಆಗಿರುವಂತೆ ತೋರುತ್ತಿಲ್ಲ. <xliff:g id="SSID_1">%2$s</xliff:g> ಗೆ ಬದಲಿಸಬೇಕೇ?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"ಬದಲಿಸಿ"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"ಬದಲಿಸಬೇಡಿ"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ko/strings.xml b/service/ServiceWifiResources/res/values-ko/strings.xml
index 05420c8cc1..01ebc51459 100644
--- a/service/ServiceWifiResources/res/values-ko/strings.xml
+++ b/service/ServiceWifiResources/res/values-ko/strings.xml
@@ -149,7 +149,7 @@
<string name="wifi_tofu_invalid_cert_chain_message" msgid="7047987920029432392">"잘못된 서버 인증 체인입니다."</string>
<string name="wifi_tofu_invalid_cert_chain_ok_text" msgid="9098567577510279854">"확인"</string>
<string name="wifi_ca_cert_dialog_preT_title" msgid="6916320484037009061">"이 네트워크를 확인할 수 없음"</string>
- <string name="wifi_ca_cert_dialog_preT_continue_text" msgid="9118713368838029797">"최신 정보 받아 보기"</string>
+ <string name="wifi_ca_cert_dialog_preT_continue_text" msgid="9118713368838029797">"연결 상태 유지"</string>
<string name="wifi_ca_cert_dialog_preT_abort_text" msgid="1331309662999405224">"지금 연결 해제"</string>
<string name="wifi_ca_cert_dialog_preT_message_hint" msgid="5682518783200852031">"<xliff:g id="SSID">%1$s</xliff:g> 네트워크에 인증서가 없습니다."</string>
<string name="wifi_ca_cert_dialog_preT_message_link" msgid="6325483132538546884">"인증서 추가 방법 알아보기"</string>
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"사용할 수 없는 네트워크"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>이(가) 관리자에 의해 사용 중지되었습니다."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"닫기"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi‑Fi 네트워크를 전환할까요?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> 네트워크가 인터넷에 연결되어 있지 않은 것 같습니다. <xliff:g id="SSID_1">%2$s</xliff:g> 네트워크로 전환할까요?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"전환"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"전환 안 함"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ky/strings.xml b/service/ServiceWifiResources/res/values-ky/strings.xml
index 6711c8470d..63aa2ad794 100644
--- a/service/ServiceWifiResources/res/values-ky/strings.xml
+++ b/service/ServiceWifiResources/res/values-ky/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Жеткиликсиз тармак"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> администраторуңуз тарабынан өчүрүлдү."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Жабуу"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi‑Fi тармактарына которуласызбы?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> Интернетке туташпай турат окшойт. <xliff:g id="SSID_1">%2$s</xliff:g> тармагына которуласызбы?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Которгуч"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Которулбасын"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-lo/strings.xml b/service/ServiceWifiResources/res/values-lo/strings.xml
index 2a6a0953d7..08201d880e 100644
--- a/service/ServiceWifiResources/res/values-lo/strings.xml
+++ b/service/ServiceWifiResources/res/values-lo/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"ບໍ່ສາມາດໃຊ້ເຄືອຂ່າຍໄດ້"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> ຖືກປິດການນຳໃຊ້ໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ປິດ"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"ສະຫຼັບເຄືອຂ່າຍ Wi-Fi ບໍ?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ປາກົດວ່າບໍ່ໄດ້ເຊື່ອມຕໍ່ກັບອິນເຕີເນັດ. ສະຫຼັບໄປຫາ <xliff:g id="SSID_1">%2$s</xliff:g> ບໍ?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"ສະຫຼັບ"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"ຢ່າສະຫຼັບ"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-lt/strings.xml b/service/ServiceWifiResources/res/values-lt/strings.xml
index 990edc1b8c..987b0d4e16 100644
--- a/service/ServiceWifiResources/res/values-lt/strings.xml
+++ b/service/ServiceWifiResources/res/values-lt/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Nepasiekiamas tinklas"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"„<xliff:g id="SSID">%1$s</xliff:g>“ išjungė administratorius."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Uždaryti"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Perjungti „Wi‑Fi“ tinklus?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Panašu, kad „<xliff:g id="SSID_0">%1$s</xliff:g>“ neprijungtas prie interneto. Perjungti į „<xliff:g id="SSID_1">%2$s</xliff:g>“?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Perjungti"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Neperjungti"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-lv/strings.xml b/service/ServiceWifiResources/res/values-lv/strings.xml
index bdc7ab778e..f25c2909da 100644
--- a/service/ServiceWifiResources/res/values-lv/strings.xml
+++ b/service/ServiceWifiResources/res/values-lv/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Nepieejams tīkls"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administrators atspējoja tīklu <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Aizvērt"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Vai pāriet uz citu Wi-Fi tīklu?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Šķiet, tīklā <xliff:g id="SSID_0">%1$s</xliff:g> nav savienojuma ar internetu. Vai vēlaties pāriet uz tīklu <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Pāriet"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Nepāriet"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-mk/strings.xml b/service/ServiceWifiResources/res/values-mk/strings.xml
index d9ee9142b4..447347aec8 100644
--- a/service/ServiceWifiResources/res/values-mk/strings.xml
+++ b/service/ServiceWifiResources/res/values-mk/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Недостапна мрежа"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> е оневозможенa од вашиот администратор."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Затвори"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Да се смени Wi-Fi-мрежата?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Се чини дека <xliff:g id="SSID_0">%1$s</xliff:g> не е поврзан со интернет. Да се префрли на <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Префрли"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Не префрлај"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ml/strings.xml b/service/ServiceWifiResources/res/values-ml/strings.xml
index d400b135dd..76249eb5df 100644
--- a/service/ServiceWifiResources/res/values-ml/strings.xml
+++ b/service/ServiceWifiResources/res/values-ml/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"ലഭ്യമല്ലാത്ത നെറ്റ്‌വർക്ക്"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> നിങ്ങളുടെ അഡ്മിൻ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"അടയ്ക്കുക"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"വൈഫൈ നെറ്റ്‌വർക്കുകൾ മാറണോ?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ഇന്റർനെറ്റിൽ കണക്‌റ്റ് ചെയ്‌തതായി തോന്നുന്നില്ല. <xliff:g id="SSID_1">%2$s</xliff:g> എന്നതിലേക്ക് മാറണോ?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"മാറുക"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"മാറരുത്"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-mn/strings.xml b/service/ServiceWifiResources/res/values-mn/strings.xml
index 5d9abf3808..42cf1e68dd 100644
--- a/service/ServiceWifiResources/res/values-mn/strings.xml
+++ b/service/ServiceWifiResources/res/values-mn/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Боломжгүй сүлжээ"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>-г танай администратор идэвхгүй болгосон."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Хаах"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi-Fi сүлжээнүүдийг сэлгэх үү?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> интернэтэд холбогдоогүй бололтой. <xliff:g id="SSID_1">%2$s</xliff:g> руу сэлгэх үү?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Сэлгэх"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Бүү сэлгэ"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-mr/strings.xml b/service/ServiceWifiResources/res/values-mr/strings.xml
index 7dc57715cc..2ab703e779 100644
--- a/service/ServiceWifiResources/res/values-mr/strings.xml
+++ b/service/ServiceWifiResources/res/values-mr/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"उपलब्ध नसलेले नेटवर्क"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"तुमच्या अ‍ॅडमिनिस्ट्रेटर ने <xliff:g id="SSID">%1$s</xliff:g> बंद केले आहे."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"बंद करा"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"वाय-फाय नेटवर्क स्विच करायचे आहेत का?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> इंटरनेटशी कनेक्ट केलेले दिसत नाही. <xliff:g id="SSID_1">%2$s</xliff:g> वर स्विच करायचे आहे का?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"स्विच करा"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"स्विच करू नका"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ms/strings.xml b/service/ServiceWifiResources/res/values-ms/strings.xml
index b6cecc16bd..7182913d5d 100644
--- a/service/ServiceWifiResources/res/values-ms/strings.xml
+++ b/service/ServiceWifiResources/res/values-ms/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Rangkaian Tidak Tersedia"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> dilumpuhkan oleh pentadbir anda."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Tutup"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Tukar rangkaian Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Nampaknya <xliff:g id="SSID_0">%1$s</xliff:g> tidak disambungkan kepada Internet. Tukar kepada <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Tukar"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Jangan tukar"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-my/strings.xml b/service/ServiceWifiResources/res/values-my/strings.xml
index a3b6e25b1e..24290c5d49 100644
--- a/service/ServiceWifiResources/res/values-my/strings.xml
+++ b/service/ServiceWifiResources/res/values-my/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"ကွန်ရက်မရနိုင်ပါ"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"သင့်စီမံခန့်ခွဲသူက <xliff:g id="SSID">%1$s</xliff:g> ကို ပိတ်ထားသည်။"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ပိတ်ရန်"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi‑Fi ကွန်ရက်များကို ပြောင်းမလား။"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ကို အင်တာနက်နှင့် ချိတ်ဆက်ထားပုံမရပါ။ <xliff:g id="SSID_1">%2$s</xliff:g> သို့ ပြောင်းမလား။"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"ပြောင်းရန်"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"မပြောင်းပါနှင့်"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-nb/strings.xml b/service/ServiceWifiResources/res/values-nb/strings.xml
index f3bd82119c..8b6ba27ff1 100644
--- a/service/ServiceWifiResources/res/values-nb/strings.xml
+++ b/service/ServiceWifiResources/res/values-nb/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Utilgjengelig nettverk"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administratoren din har deaktivert <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Lukk"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Vil du bytte wifi-nettverk?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ser ikke ut til å være koblet til internett. Vil du bytte til <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Bytt"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ikke bytt"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ne/strings.xml b/service/ServiceWifiResources/res/values-ne/strings.xml
index 2bcf4a2404..16b6975c5c 100644
--- a/service/ServiceWifiResources/res/values-ne/strings.xml
+++ b/service/ServiceWifiResources/res/values-ne/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"नेटवर्क उपलब्ध छैन"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"तपाईंका एड्मिनले <xliff:g id="SSID">%1$s</xliff:g> अफ गर्नुभएको छ।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"बन्द गर्नुहोस्"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi‑Fi नेटवर्क बदल्ने हो?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> इन्टरनेटमा कनेक्ट छैन जस्तो देखिन्छ। नेटवर्क बदलेर <xliff:g id="SSID_1">%2$s</xliff:g> प्रयोग गर्न थाल्ने हो?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"बदल्नुहोस्"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"नबदल्नुहोस्"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-nl/strings.xml b/service/ServiceWifiResources/res/values-nl/strings.xml
index 4dfa026a6e..69a3dbe854 100644
--- a/service/ServiceWifiResources/res/values-nl/strings.xml
+++ b/service/ServiceWifiResources/res/values-nl/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Niet-beschikbaar netwerk"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> is uitgezet door je beheerder."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Sluiten"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Schakelen tussen wifi-netwerken?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> heeft geen verbinding met internet. Overschakelen naar <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Overschakelen"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Niet overschakelen"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-or/strings.xml b/service/ServiceWifiResources/res/values-or/strings.xml
index 5c2500c48d..43f2e459cd 100644
--- a/service/ServiceWifiResources/res/values-or/strings.xml
+++ b/service/ServiceWifiResources/res/values-or/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"ଅନୁପଲବ୍ଧ ନେଟୱାର୍କ"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>କୁ ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ଅକ୍ଷମ କରାଯାଇଛି।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ବନ୍ଦ କରନ୍ତୁ"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"ୱାଇ-ଫାଇ ନେଟୱାର୍କକୁ ସ୍ୱିଚ କରିବେ?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ଇଣ୍ଟରନେଟ ସହ କନେକ୍ଟ ହୋଇଥିବା ପରି ଲାଗୁନାହିଁ। <xliff:g id="SSID_1">%2$s</xliff:g>କୁ ସ୍ୱିଚ କରିବେ?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"ସ୍ୱିଚ କରନ୍ତୁ"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"ସ୍ୱିଚ କରନ୍ତୁ ନାହିଁ"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pa/strings.xml b/service/ServiceWifiResources/res/values-pa/strings.xml
index ca0d18ece0..b3310fc17e 100644
--- a/service/ServiceWifiResources/res/values-pa/strings.xml
+++ b/service/ServiceWifiResources/res/values-pa/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ <xliff:g id="SSID">%1$s</xliff:g> ਨੂੰ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ।"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ਬੰਦ ਕਰੋ"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"ਕੀ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਵਿਚਕਾਰ ਸਵਿੱਚ ਕਰਨਾ ਹੈ?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"ਲੱਗਦਾ ਹੈ <xliff:g id="SSID_0">%1$s</xliff:g> ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਹੈ। ਕੀ <xliff:g id="SSID_1">%2$s</xliff:g> \'ਤੇ ਸਵਿੱਚ ਕਰਨਾ ਹੈ?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"ਸਵਿੱਚ ਕਰੋ"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"ਸਵਿੱਚ ਨਾ ਕਰੋ"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pl/strings.xml b/service/ServiceWifiResources/res/values-pl/strings.xml
index 022f3ce2c3..406b824b22 100644
--- a/service/ServiceWifiResources/res/values-pl/strings.xml
+++ b/service/ServiceWifiResources/res/values-pl/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Niedostępna sieć"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administrator wyłączył sieć <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zamknij"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Przełączyć sieci Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Wygląda na to, że sieć <xliff:g id="SSID_0">%1$s</xliff:g> nie jest podłączona do internetu. Przełączyć na <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Przełącz"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Nie przełączaj"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pt-rBR/strings.xml b/service/ServiceWifiResources/res/values-pt-rBR/strings.xml
index 912af2c5b4..7db656225b 100644
--- a/service/ServiceWifiResources/res/values-pt-rBR/strings.xml
+++ b/service/ServiceWifiResources/res/values-pt-rBR/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Rede indisponível"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"O recurso <xliff:g id="SSID">%1$s</xliff:g> foi desativado pelo administrador."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fechar"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Trocar de rede Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"O dispositivo <xliff:g id="SSID_0">%1$s</xliff:g> parece não estar conectado à Internet. Trocar para <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Trocar"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Não trocar"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pt-rPT/strings.xml b/service/ServiceWifiResources/res/values-pt-rPT/strings.xml
index a23ffacb4e..74f93432c5 100644
--- a/service/ServiceWifiResources/res/values-pt-rPT/strings.xml
+++ b/service/ServiceWifiResources/res/values-pt-rPT/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Rede indisponível"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"O administrador desativou a funcionalidade <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fechar"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Mudar de rede Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> não parece ter uma ligação à Internet. Mudar para <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Mudar"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Não mudar"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-pt/strings.xml b/service/ServiceWifiResources/res/values-pt/strings.xml
index 912af2c5b4..7db656225b 100644
--- a/service/ServiceWifiResources/res/values-pt/strings.xml
+++ b/service/ServiceWifiResources/res/values-pt/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Rede indisponível"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"O recurso <xliff:g id="SSID">%1$s</xliff:g> foi desativado pelo administrador."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Fechar"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Trocar de rede Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"O dispositivo <xliff:g id="SSID_0">%1$s</xliff:g> parece não estar conectado à Internet. Trocar para <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Trocar"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Não trocar"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ro/strings.xml b/service/ServiceWifiResources/res/values-ro/strings.xml
index ea9cf903fc..3f395e24c1 100644
--- a/service/ServiceWifiResources/res/values-ro/strings.xml
+++ b/service/ServiceWifiResources/res/values-ro/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Rețea indisponibilă"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Administratorul a dezactivat <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Închide"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Schimbi rețeaua Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> nu pare să se fi conectat la internet. Comuți la <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Comută"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Nu comuta"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ru/strings.xml b/service/ServiceWifiResources/res/values-ru/strings.xml
index 7943270982..794aaba076 100644
--- a/service/ServiceWifiResources/res/values-ru/strings.xml
+++ b/service/ServiceWifiResources/res/values-ru/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Сеть недоступна"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Администратор отключил функцию \"<xliff:g id="SSID">%1$s</xliff:g>\"."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Закрыть"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Перейти на другую сеть Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Сеть <xliff:g id="SSID_0">%1$s</xliff:g> не подключена к интернету. Перейти на <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Перейти"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Нет"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-si/strings.xml b/service/ServiceWifiResources/res/values-si/strings.xml
index b322b9d10c..86dd174619 100644
--- a/service/ServiceWifiResources/res/values-si/strings.xml
+++ b/service/ServiceWifiResources/res/values-si/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"ලබා ගත නොහැකි ජාලය"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> ඔබේ පරිපාලක විසින් අබල කර ඇත."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"වසන්න"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi-Fi ජාල මාරු කරන්නද?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> අන්තර්ජාලයට සම්බන්ධ වී ඇති බව නොපෙනේ. <xliff:g id="SSID_1">%2$s</xliff:g> වෙත මාරු කරන්නද?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"මාරු කරන්න"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"මාරු නොකරන්න"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sk/strings.xml b/service/ServiceWifiResources/res/values-sk/strings.xml
index b0c9e40862..d10d9423f5 100644
--- a/service/ServiceWifiResources/res/values-sk/strings.xml
+++ b/service/ServiceWifiResources/res/values-sk/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Nedostupná sieť"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Funkcia <xliff:g id="SSID">%1$s</xliff:g> je deaktivovaná správcom."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zavrieť"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Chcete prepnúť siete Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> zrejme nemá internetové pripojenie. Chcete prepnúť na <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Prepnúť"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Neprepnúť"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sl/strings.xml b/service/ServiceWifiResources/res/values-sl/strings.xml
index 3f878d2cd1..3a683757b9 100644
--- a/service/ServiceWifiResources/res/values-sl/strings.xml
+++ b/service/ServiceWifiResources/res/values-sl/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Omrežje ni na voljo"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Omrežje <xliff:g id="SSID">%1$s</xliff:g> je onemogočil skrbnik."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Zapri"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Želite preklopiti omrežje Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Videti je, da omrežje <xliff:g id="SSID_0">%1$s</xliff:g> ni povezano v internet. Želite preklopiti na omrežje <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Preklopi"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ne preklopi"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sq/strings.xml b/service/ServiceWifiResources/res/values-sq/strings.xml
index 236f162f4d..9cb78518c2 100644
--- a/service/ServiceWifiResources/res/values-sq/strings.xml
+++ b/service/ServiceWifiResources/res/values-sq/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Rrjeti i padisponueshëm"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> është çaktivizuar nga administratori yt."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Mbyll"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Të ndërrohen rrjetet Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> nuk duket të jetë lidhur me internetin. Të kalohet në <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Kalo"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Mos kalo"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sr/strings.xml b/service/ServiceWifiResources/res/values-sr/strings.xml
index 0a93d3c909..b71ce7753c 100644
--- a/service/ServiceWifiResources/res/values-sr/strings.xml
+++ b/service/ServiceWifiResources/res/values-sr/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Недоступна мрежа"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Администратор је онемогућио <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Затвори"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Желите да промените WiFi мрежу?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Изгледа да мрежа <xliff:g id="SSID_0">%1$s</xliff:g> није повезана на интернет. Желите да пребаците на мрежу <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Пребаци"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Не пребацуј"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sv/strings.xml b/service/ServiceWifiResources/res/values-sv/strings.xml
index 6640cacad3..c0299b75c3 100644
--- a/service/ServiceWifiResources/res/values-sv/strings.xml
+++ b/service/ServiceWifiResources/res/values-sv/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Otillgängligt nätverk"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> har inaktiverats av administratören."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Stäng"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Vill du byta wifi-nätverk?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> verkar inte vara ansluten till internet. Vill du byta till <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Byt"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Byt inte"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-sw/strings.xml b/service/ServiceWifiResources/res/values-sw/strings.xml
index 590442b319..dc66784a1e 100644
--- a/service/ServiceWifiResources/res/values-sw/strings.xml
+++ b/service/ServiceWifiResources/res/values-sw/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Mtandao Haupatikani"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> umezimwa na msimamizi wako."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Funga"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Ungependa kubadili mitandao ya Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> haionekani kuwa imeunganishwa kwenye intaneti. Ungependa kubadilisha utumie <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Badilisha"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Usibadili"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ta/strings.xml b/service/ServiceWifiResources/res/values-ta/strings.xml
index d3aa5e610f..c8508d3959 100644
--- a/service/ServiceWifiResources/res/values-ta/strings.xml
+++ b/service/ServiceWifiResources/res/values-ta/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"நெட்வொர்க் கிடைக்கவில்லை"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> உங்கள் நிர்வாகியால் முடக்கப்பட்டுள்ளது."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"மூடுக"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"வைஃபை நெட்வொர்க்குகளை மாற்றவா?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"இணையதளத்தில் இணைப்பதற்காக <xliff:g id="SSID_0">%1$s</xliff:g> காட்டப்படவில்லை. <xliff:g id="SSID_1">%2$s</xliff:g>க்கு மாற்றவா?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"மாற்று"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"மாற்ற வேண்டாம்"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-te/strings.xml b/service/ServiceWifiResources/res/values-te/strings.xml
index b0ae0c0348..48a032f1db 100644
--- a/service/ServiceWifiResources/res/values-te/strings.xml
+++ b/service/ServiceWifiResources/res/values-te/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"నెట్‌వర్క్ అందుబాటులో లేదు"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>ను మీ అడ్మినిస్ట్రేటర్ డిజేబుల్ చేశారు."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"మూసివేయండి"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Wi‑Fi నెట్‌వర్క్‌లను మార్చలా?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> ఇంటర్నెట్‌కు కనెక్ట్ అయి లేనట్లు కనిపిస్తోంది. <xliff:g id="SSID_1">%2$s</xliff:g>‌కు మారాలా?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"మారండి"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"మారద్దు"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-th/strings.xml b/service/ServiceWifiResources/res/values-th/strings.xml
index 3dcc1edfa7..2eeb1c3fa5 100644
--- a/service/ServiceWifiResources/res/values-th/strings.xml
+++ b/service/ServiceWifiResources/res/values-th/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"เครือข่ายไม่พร้อมใช้งาน"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"ผู้ดูแลระบบปิดใช้ <xliff:g id="SSID">%1$s</xliff:g>"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"ปิด"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"เปลี่ยนเครือข่าย Wi-Fi ไหม"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"ดูเหมือนว่า <xliff:g id="SSID_0">%1$s</xliff:g> จะไม่ได้เชื่อมต่ออินเทอร์เน็ต เปลี่ยนเป็น <xliff:g id="SSID_1">%2$s</xliff:g> ไหม"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"เปลี่ยน"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"ไม่เปลี่ยน"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-tl/strings.xml b/service/ServiceWifiResources/res/values-tl/strings.xml
index ab10a469af..97da1e3764 100644
--- a/service/ServiceWifiResources/res/values-tl/strings.xml
+++ b/service/ServiceWifiResources/res/values-tl/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Hindi Available na Network"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Na-disable ng iyong administrator ang <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Isara"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Lumipat ng Wi‑Fi network?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Mukhang hindi nakakonekta sa internet ang <xliff:g id="SSID_0">%1$s</xliff:g>. Lumipat sa <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Lumipat"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Huwag lumipat"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-tr/strings.xml b/service/ServiceWifiResources/res/values-tr/strings.xml
index 3ff1611056..04adf3329c 100644
--- a/service/ServiceWifiResources/res/values-tr/strings.xml
+++ b/service/ServiceWifiResources/res/values-tr/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Kullanılamayan Ağ"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g>, yöneticiniz tarafından devre dışı bırakıldı."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Kapat"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Kablosuz ağa geçişiyapılsın mı?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> internete bağlı değil. <xliff:g id="SSID_1">%2$s</xliff:g> geçişi yapılsın mı?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Geçiş yap"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Geçiş yapma"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-uk/strings.xml b/service/ServiceWifiResources/res/values-uk/strings.xml
index 4115506eac..1654b0c394 100644
--- a/service/ServiceWifiResources/res/values-uk/strings.xml
+++ b/service/ServiceWifiResources/res/values-uk/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Недоступна мережа"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Адміністратор вимкнув мережу <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Закрити"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Перемкнутися на іншу мережу Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Схоже, у мережі <xliff:g id="SSID_0">%1$s</xliff:g> немає інтернет-зʼєднання. Перемкнутися на мережу <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Перемкнутися"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Не перемикатися"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-ur/strings.xml b/service/ServiceWifiResources/res/values-ur/strings.xml
index cabb3d9846..099d3a12fc 100644
--- a/service/ServiceWifiResources/res/values-ur/strings.xml
+++ b/service/ServiceWifiResources/res/values-ur/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"غیر دستیاب نیٹ ورک"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> کو آپ کے منتظم کے ذریعے مسدود کر دیا گیا ہے۔"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"بند کریں"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"‏Wi-Fi نیٹ ورکس کو سوئچ کریں؟"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"ایسا لگتا ہے کہ <xliff:g id="SSID_0">%1$s</xliff:g> انٹرنیٹ سے منسلک نہیں ہے۔ <xliff:g id="SSID_1">%2$s</xliff:g> پر سوئچ کریں؟"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"سوئچ کریں"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"سوئچ نہ کریں"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-uz/strings.xml b/service/ServiceWifiResources/res/values-uz/strings.xml
index 8d57f4a56b..cb081b7a15 100644
--- a/service/ServiceWifiResources/res/values-uz/strings.xml
+++ b/service/ServiceWifiResources/res/values-uz/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Tarmoq mavjud emas"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> administrator tomonidan faolsizlantirilgan."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Yopish"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Boshqa Wi-Fi tarmoqqa almashtirilsinmi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> internetga ulanmagan. <xliff:g id="SSID_1">%2$s</xliff:g>ga almashsinmi?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Almashish"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Almashmasin"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-vi/strings.xml b/service/ServiceWifiResources/res/values-vi/strings.xml
index 4242fb6110..e9b6eb4c62 100644
--- a/service/ServiceWifiResources/res/values-vi/strings.xml
+++ b/service/ServiceWifiResources/res/values-vi/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Không có kết nối mạng"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"Quản trị viên của bạn đã tắt tính năng <xliff:g id="SSID">%1$s</xliff:g>."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Đóng"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Chuyển mạng Wi‑Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"Có vẻ như <xliff:g id="SSID_0">%1$s</xliff:g> không kết nối với Internet. Chuyển sang <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Chuyển"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Không chuyển"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-zh-rCN/strings.xml b/service/ServiceWifiResources/res/values-zh-rCN/strings.xml
index 68ff3fdf64..d8dffa10e0 100644
--- a/service/ServiceWifiResources/res/values-zh-rCN/strings.xml
+++ b/service/ServiceWifiResources/res/values-zh-rCN/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"网络无法使用"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"<xliff:g id="SSID">%1$s</xliff:g> 已被您的管理员停用。"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"关闭"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"要切换到 WLAN 网络吗?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g>似乎并未连接到互联网。要切换到<xliff:g id="SSID_1">%2$s</xliff:g>吗?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"切换"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"不切换"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-zh-rHK/strings.xml b/service/ServiceWifiResources/res/values-zh-rHK/strings.xml
index e4ba74633f..5004287d8d 100644
--- a/service/ServiceWifiResources/res/values-zh-rHK/strings.xml
+++ b/service/ServiceWifiResources/res/values-zh-rHK/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"無法使用網絡"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"您的管理員已停用「<xliff:g id="SSID">%1$s</xliff:g>」。"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"關閉"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"要切換至 Wi-Fi 網絡嗎?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"「<xliff:g id="SSID_0">%1$s</xliff:g>」似乎尚未連線至互聯網。要切換至「<xliff:g id="SSID_1">%2$s</xliff:g>」嗎?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"切換"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"不要切換"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-zh-rTW/strings.xml b/service/ServiceWifiResources/res/values-zh-rTW/strings.xml
index 4a0ff5f087..d0781fbeeb 100644
--- a/service/ServiceWifiResources/res/values-zh-rTW/strings.xml
+++ b/service/ServiceWifiResources/res/values-zh-rTW/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"網路無法使用"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"你的系統管理員已停用 <xliff:g id="SSID">%1$s</xliff:g>。"</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"關閉"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"是否要切換至 Wi‑Fi 網路?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"<xliff:g id="SSID_0">%1$s</xliff:g> 似乎並未連上網際網路,是否要切換至 <xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"切換"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"不要切換"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values-zu/strings.xml b/service/ServiceWifiResources/res/values-zu/strings.xml
index ceb6d104f9..e7092cf247 100644
--- a/service/ServiceWifiResources/res/values-zu/strings.xml
+++ b/service/ServiceWifiResources/res/values-zu/strings.xml
@@ -168,4 +168,8 @@
<string name="wifi_network_disabled_by_admin_title" msgid="9057697656855227293">"Inethiwekhi Engatholakali"</string>
<string name="wifi_network_disabled_by_admin_message" msgid="7830360441333155462">"I-<xliff:g id="SSID">%1$s</xliff:g> ikhutshazwe umlawuli wakho."</string>
<string name="wifi_network_disabled_by_admin_button" msgid="3350310756265122689">"Vala"</string>
+ <string name="wifi_network_switch_dialog_title" msgid="4387595800316985421">"Shintsha Amanethiwekhi we-Wi-Fi?"</string>
+ <string name="wifi_network_switch_dialog_message" msgid="1122837977780086429">"I-<xliff:g id="SSID_0">%1$s</xliff:g> ayibonakali ixhumeke ku-inthanethi. Shintshela ku-<xliff:g id="SSID_1">%2$s</xliff:g>?"</string>
+ <string name="wifi_network_switch_dialog_positive_button" msgid="7845507995422722454">"Shintsha"</string>
+ <string name="wifi_network_switch_dialog_negative_button" msgid="1496665895689498806">"Ungashintshi"</string>
</resources>
diff --git a/service/ServiceWifiResources/res/values/config.xml b/service/ServiceWifiResources/res/values/config.xml
index 1b47cd4998..13710f250b 100644
--- a/service/ServiceWifiResources/res/values/config.xml
+++ b/service/ServiceWifiResources/res/values/config.xml
@@ -1157,7 +1157,7 @@
<bool translatable="false" name="config_wifiNiapModeEnabled">false</bool>
<!-- Boolean indicating whether the framework updates country from scan results when there is
no telephony country code and driver country code is 00.
- This is applied only during the setup wizard -->
+ This is applied only during the setup wizard. -->
<bool translatable="false" name ="config_wifiUpdateCountryCodeFromScanResultSetupWizard">false</bool>
<!-- IP address configurations required for P2P GO to assign IP address in EAPOL frame.
Refer - Wi-Fi P2P Technical Specification v1.7 - Section 4.2.8 IP Address Allocation
@@ -1175,4 +1175,9 @@
configured, the default range is 192.168.49.128 to 192.168.49.254 -->
<string translatable="false" name="config_wifiP2pGoEapolIpAddressRangeStart"/>
<string translatable="false" name="config_wifiP2pGoEapolIpAddressRangeEnd"/>
+ <!-- Boolean indicating whether the framework updates country from scan results when there is
+ no telephony country code. This is applied to all generic cases and might require the
+ regulatory approval (for example, FCC pre-approval is required according to "594280 D01
+ Software Configuration Control v02r01").-->
+ <bool translatable="false" name ="config_wifiUpdateCountryCodeFromScanResultGeneric">false</bool>
</resources>
diff --git a/service/ServiceWifiResources/res/values/overlayable.xml b/service/ServiceWifiResources/res/values/overlayable.xml
index ab0aff0acb..345c7b63c6 100644
--- a/service/ServiceWifiResources/res/values/overlayable.xml
+++ b/service/ServiceWifiResources/res/values/overlayable.xml
@@ -319,6 +319,7 @@
<item type="bool" name="config_wifiP2pGoIpAddressAllocationInEapolFrames" />
<item type="string" name="config_wifiP2pGoEapolIpAddressRangeStart" />
<item type="string" name="config_wifiP2pGoEapolIpAddressRangeEnd" />
+ <item type="bool" name="config_wifiUpdateCountryCodeFromScanResultGeneric" />
<!-- Params from config.xml that can be overlayed -->
diff --git a/service/java/com/android/server/wifi/CertificateEventInfo.java b/service/java/com/android/server/wifi/CertificateEventInfo.java
new file mode 100644
index 0000000000..f688e4da56
--- /dev/null
+++ b/service/java/com/android/server/wifi/CertificateEventInfo.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2023 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 java.security.cert.X509Certificate;
+import java.util.Objects;
+
+/**
+ * Stores supplicant certificate event information
+ */
+public class CertificateEventInfo {
+ CertificateEventInfo(@NonNull X509Certificate cert, @NonNull String certHash) {
+ this.mCert = Objects.requireNonNull(cert);
+ this.mCertHash = Objects.requireNonNull(certHash);
+ }
+ @NonNull private final X509Certificate mCert;
+ @NonNull private final String mCertHash;
+
+ /**
+ * Get the X509 certificate stored in this object
+ *
+ * @return X509 certificate
+ */
+ public X509Certificate getCert() {
+ return mCert;
+ }
+
+ /**
+ * Get the certificate hash of the stored certificate
+ *
+ * @return certificate hash
+ */
+ public String getCertHash() {
+ return mCertHash;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(" Certificate Hash: ").append(mCertHash);
+ sb.append(" X509Certificate: ").append(mCert);
+ return sb.toString();
+ }
+}
+
+
+
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index c5286cb3e7..ae6fcb2b29 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -172,7 +172,6 @@ import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.URL;
-import java.security.cert.X509Certificate;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
@@ -924,7 +923,7 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
WifiMonitor.MBO_OCE_BSS_TM_HANDLING_DONE,
WifiMonitor.TRANSITION_DISABLE_INDICATION,
WifiMonitor.NETWORK_NOT_FOUND_EVENT,
- WifiMonitor.TOFU_ROOT_CA_CERTIFICATE,
+ WifiMonitor.TOFU_CERTIFICATE_EVENT,
WifiMonitor.AUXILIARY_SUPPLICANT_EVENT,
WifiMonitor.QOS_POLICY_RESET_EVENT,
WifiMonitor.QOS_POLICY_REQUEST_EVENT,
@@ -2487,8 +2486,8 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
return "BLOCK_DISCOVERY";
case WifiMonitor.NETWORK_NOT_FOUND_EVENT:
return "NETWORK_NOT_FOUND_EVENT";
- case WifiMonitor.TOFU_ROOT_CA_CERTIFICATE:
- return "TOFU_ROOT_CA_CERTIFICATE";
+ case WifiMonitor.TOFU_CERTIFICATE_EVENT:
+ return "TOFU_CERTIFICATE_EVENT";
case WifiMonitor.BSS_FREQUENCY_CHANGED_EVENT:
return "BSS_FREQUENCY_CHANGED_EVENT";
case RunnerState.STATE_ENTER_CMD:
@@ -6035,12 +6034,12 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
handleStatus = NOT_HANDLED;
break;
}
- case WifiMonitor.TOFU_ROOT_CA_CERTIFICATE:
+ case WifiMonitor.TOFU_CERTIFICATE_EVENT: {
if (null == mTargetWifiConfiguration) break;
- int certificateDepth = message.arg2;
+ final int certificateDepth = message.arg2;
+ final CertificateEventInfo eventInfo = (CertificateEventInfo) message.obj;
if (!mInsecureEapNetworkHandler.addPendingCertificate(
- mTargetWifiConfiguration.SSID, message.arg2,
- (X509Certificate) message.obj)) {
+ mTargetWifiConfiguration.SSID, certificateDepth, eventInfo)) {
Log.d(TAG, "Cannot set pending cert.");
}
// Launch user approval upon receiving the server certificate and disconnect
@@ -6051,6 +6050,7 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
sendMessage(CMD_DISCONNECT, StaEvent.DISCONNECT_NETWORK_UNTRUSTED);
}
break;
+ }
default: {
handleStatus = NOT_HANDLED;
break;
diff --git a/service/java/com/android/server/wifi/DppManager.java b/service/java/com/android/server/wifi/DppManager.java
index bd09f5aa56..a30eaff6c8 100644
--- a/service/java/com/android/server/wifi/DppManager.java
+++ b/service/java/com/android/server/wifi/DppManager.java
@@ -661,9 +661,12 @@ public class DppManager {
private void onSuccessConfigReceived(WifiConfiguration newWifiConfiguration,
boolean connStatusRequested) {
try {
+ if (mDppRequestInfo == null) {
+ Log.e(TAG, "onSuccessConfigReceived event without a request information object");
+ return;
+ }
logd("onSuccessConfigReceived: connection status requested: " + connStatusRequested);
-
- if (mDppRequestInfo != null && mDppRequestInfo.isGeneratingSelfConfiguration) {
+ if (mDppRequestInfo.isGeneratingSelfConfiguration) {
WifiConfiguration existingWifiConfig = mWifiConfigManager
.getConfiguredNetworkWithoutMasking(mDppRequestInfo.networkId);
@@ -693,7 +696,7 @@ public class DppManager {
}
// Done with self configuration. reset flag.
mDppRequestInfo.isGeneratingSelfConfiguration = false;
- } else if (mDppRequestInfo != null) {
+ } else {
long now = mClock.getElapsedSinceBootMillis();
mDppMetrics.updateDppOperationTime((int) (now - mDppRequestInfo.startTime));
@@ -715,8 +718,6 @@ public class DppManager {
mDppRequestInfo.callback.onFailure(EasyConnectStatusCallback
.EASY_CONNECT_EVENT_FAILURE_CONFIGURATION, null, null, new int[0]);
}
- } else {
- Log.e(TAG, "Unexpected null Wi-Fi configuration object");
}
} catch (RemoteException e) {
Log.e(TAG, "Callback failure");
@@ -1084,6 +1085,12 @@ public class DppManager {
mHandler.post(() -> {
dppRequestInfo.isGeneratingSelfConfiguration = false;
+ // Clean up supplicant resource
+ if (mDppRequestInfo.authRole == DPP_AUTH_ROLE_INITIATOR) {
+ if (!mWifiNative.stopDppInitiator(mClientIfaceName)) {
+ Log.e(TAG, "Failed to stop DPP Initiator");
+ }
+ }
cleanupDppResources();
});
}
diff --git a/service/java/com/android/server/wifi/InsecureEapNetworkHandler.java b/service/java/com/android/server/wifi/InsecureEapNetworkHandler.java
index d754d6ae01..f3aa9fff7b 100644
--- a/service/java/com/android/server/wifi/InsecureEapNetworkHandler.java
+++ b/service/java/com/android/server/wifi/InsecureEapNetworkHandler.java
@@ -105,6 +105,7 @@ public class InsecureEapNetworkHandler {
private List<X509Certificate> mServerCertChain = new ArrayList<>();
private WifiDialogManager.DialogHandle mTofuAlertDialog = null;
private boolean mIsCertNotificationReceiverRegistered = false;
+ private String mServerCertHash = null;
BroadcastReceiver mCertNotificationReceiver = new BroadcastReceiver() {
@Override
@@ -240,19 +241,20 @@ public class InsecureEapNetworkHandler {
* @param ssid the target network SSID.
* @param depth the depth of this cert. The Root CA should be 0 or
* a positive number, and the server cert is 0.
- * @param cert a certificate from the server.
+ * @param certInfo a certificate info object from the server.
* @return true if the cert is cached; otherwise, false.
*/
public boolean addPendingCertificate(@NonNull String ssid, int depth,
- @NonNull X509Certificate cert) {
+ @NonNull CertificateEventInfo certInfo) {
String configProfileKey = mCurrentTofuConfig != null
? mCurrentTofuConfig.getProfileKey() : "null";
- Log.d(TAG, "setPendingCertificate: " + "ssid=" + ssid + " depth=" + depth
+ Log.d(TAG, "addPendingCertificate: " + "ssid=" + ssid + " depth=" + depth
+ + " certHash=" + (certInfo == null ? "<none>" : certInfo.getCertHash())
+ " current config=" + configProfileKey);
if (TextUtils.isEmpty(ssid)) return false;
if (null == mCurrentTofuConfig) return false;
if (!TextUtils.equals(ssid, mCurrentTofuConfig.SSID)) return false;
- if (null == cert) return false;
+ if (null == certInfo) return false;
if (depth < 0) return false;
// If TOFU is not supported return immediately, although this should not happen since
@@ -273,35 +275,36 @@ public class InsecureEapNetworkHandler {
putNetworkOnHold();
}
- if (!mServerCertChain.contains(cert)) {
- mServerCertChain.add(cert);
+ if (!mServerCertChain.contains(certInfo.getCert())) {
+ mServerCertChain.add(certInfo.getCert());
}
// 0 is the tail, i.e. the server cert.
if (depth == 0 && null == mPendingServerCert) {
- mPendingServerCert = cert;
+ mPendingServerCert = certInfo.getCert();
Log.d(TAG, "Pending server certificate: " + mPendingServerCert);
mPendingServerCertSubjectInfo = CertificateSubjectInfo.parse(
- cert.getSubjectX500Principal().getName());
+ certInfo.getCert().getSubjectX500Principal().getName());
if (null == mPendingServerCertSubjectInfo) {
Log.e(TAG, "CA cert has no valid subject.");
return false;
}
mPendingServerCertIssuerInfo = CertificateSubjectInfo.parse(
- cert.getIssuerX500Principal().getName());
+ certInfo.getCert().getIssuerX500Principal().getName());
if (null == mPendingServerCertIssuerInfo) {
Log.e(TAG, "CA cert has no valid issuer.");
return false;
}
+ mServerCertHash = certInfo.getCertHash();
}
// Root or intermediate cert.
if (depth < mPendingRootCaCertDepth) {
- Log.d(TAG, "Ignore intermediate cert." + cert);
+ Log.d(TAG, "Ignore intermediate cert." + certInfo.getCert());
return true;
}
mPendingRootCaCertDepth = depth;
- mPendingRootCaCert = cert;
+ mPendingRootCaCert = certInfo.getCert();
Log.d(TAG, "Pending Root CA certificate: " + mPendingRootCaCert);
return true;
}
@@ -446,21 +449,42 @@ public class InsecureEapNetworkHandler {
}
private boolean isServerCertChainValid() {
- if (mServerCertChain.size() == 0) return false;
-
+ int depth = mServerCertChain.size();
+ Log.d(TAG, "Checking certificate chain with a total depth of " + depth + ":");
+ if (depth == 0) {
+ Log.e(TAG, "No certificate chain provided by the server.");
+ return false;
+ }
X509Certificate parentCert = null;
for (X509Certificate cert: mServerCertChain) {
String subject = cert.getSubjectX500Principal().getName();
String issuer = cert.getIssuerX500Principal().getName();
boolean isCa = cert.getBasicConstraints() >= 0;
- Log.d(TAG, "Subject: " + subject + ", Issuer: " + issuer + ", isCA: " + isCa);
+ Log.d(TAG, "Subject: " + subject + ", Issuer: " + issuer + ", isCA: " + isCa
+ + ", depth: " + (depth - 1));
if (parentCert == null) {
- // The root cert, it should be a CA cert or a self-signed cert.
+ // Special handling for a cert chain of size 1
+ if (mServerCertChain.size() == 1) {
+ // The only valid case for TLS is a self-signed Root CA
+ if (!isCa || !subject.equals(issuer)) {
+ // A misconfigured cert chain, use server certificate pinning instead
+ Log.d(TAG, "Misconfigured cert chain, use server cert pinning");
+ break;
+ }
+ Log.d(TAG, "Found a valid Root CA cert, reset current cert hash value");
+ mServerCertHash = null;
+ break;
+ }
+ // The root cert must be a CA cert or a self-signed cert.
if (!isCa && !subject.equals(issuer)) {
- Log.e(TAG, "The root cert is not a CA cert or a self-signed cert.");
+ Log.e(TAG, "The Root cert is not a CA cert or a self-signed cert.");
return false;
}
+ if (subject.equals(issuer)) {
+ Log.d(TAG, "Found a valid Root CA cert, reset current cert hash value");
+ mServerCertHash = null;
+ }
} else {
// The issuer of intermediate cert of the leaf cert should be
// the same as the subject of its parent cert.
@@ -470,6 +494,10 @@ public class InsecureEapNetworkHandler {
}
}
parentCert = cert;
+ depth--;
+ }
+ if (mServerCertHash != null) {
+ Log.i(TAG, "Using server certificate pinning");
}
return true;
}
@@ -512,7 +540,8 @@ public class InsecureEapNetworkHandler {
return;
}
if (!mWifiConfigManager.updateCaCertificate(
- mCurrentTofuConfig.networkId, mPendingRootCaCert, mPendingServerCert)) {
+ mCurrentTofuConfig.networkId, mPendingRootCaCert, mPendingServerCert,
+ mServerCertHash)) {
// The user approved this network,
// keep the connection regardless of the result.
Log.e(TAG, "Cannot update CA cert to network " + mCurrentTofuConfig.getProfileKey()
@@ -746,6 +775,7 @@ public class InsecureEapNetworkHandler {
mPendingServerCertSubjectInfo = null;
mPendingServerCertIssuerInfo = null;
mCurrentTofuConfig = null;
+ mServerCertHash = null;
}
private void clearNativeData() {
diff --git a/service/java/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImpl.java b/service/java/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImpl.java
index 11fd94adc2..21d3426f56 100644
--- a/service/java/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImpl.java
+++ b/service/java/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImpl.java
@@ -209,7 +209,8 @@ class SupplicantStaNetworkCallbackAidlImpl extends ISupplicantStaNetworkCallback
+ " certHash=" + certHash
+ " cert=" + cert);
mWifiMonitor.broadcastCertificationEvent(
- mIfaceName, mFrameworkNetworkId, mSsid, depth, cert);
+ mIfaceName, mFrameworkNetworkId, mSsid, depth,
+ new CertificateEventInfo(cert, certHash));
}
}
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java
index 6de71de0c3..2f66a49bfb 100644
--- a/service/java/com/android/server/wifi/WifiConfigManager.java
+++ b/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -1520,6 +1520,7 @@ public class WifiConfigManager {
if (hasCredentialChanged) {
newInternalConfig.getNetworkSelectionStatus().setHasEverConnected(false);
newInternalConfig.setHasPreSharedKeyChanged(true);
+ Log.i(TAG, "Credential changed for netId=" + newInternalConfig.networkId);
}
// Add it to our internal map. This will replace any existing network configuration for
@@ -4158,16 +4159,17 @@ public class WifiConfigManager {
}
/**
- * This method updates the Root CA certifiate and the domain name of the
+ * This method updates the Root CA certificate and the domain name of the
* server in the internal network.
*
* @param networkId networkId corresponding to the network to be updated.
* @param caCert Root CA certificate to be updated.
* @param serverCert Server certificate to be updated.
+ * @param certHash Server certificate hash (for TOFU case with no Root CA)
* @return true if updating Root CA certificate successfully; otherwise, false.
*/
public boolean updateCaCertificate(int networkId, @NonNull X509Certificate caCert,
- @NonNull X509Certificate serverCert) {
+ @NonNull X509Certificate serverCert, String certHash) {
WifiConfiguration internalConfig = getInternalConfiguredNetwork(networkId);
if (internalConfig == null) {
Log.e(TAG, "No network for network ID " + networkId);
@@ -4199,11 +4201,15 @@ public class WifiConfigManager {
WifiConfiguration newConfig = new WifiConfiguration(internalConfig);
try {
if (newConfig.enterpriseConfig.isTrustOnFirstUseEnabled()) {
- newConfig.enterpriseConfig.setCaCertificateForTrustOnFirstUse(caCert);
- // setCaCertificate will mark that this CA certificate should be removed on
- // removing this configuration.
+ if (TextUtils.isEmpty(certHash)) {
+ newConfig.enterpriseConfig.setCaCertificateForTrustOnFirstUse(caCert);
+ } else {
+ newConfig.enterpriseConfig.setServerCertificateHash(certHash);
+ }
newConfig.enterpriseConfig.enableTrustOnFirstUse(false);
} else {
+ // setCaCertificate will mark that this CA certificate should be removed on
+ // removing this configuration.
newConfig.enterpriseConfig.setCaCertificate(caCert);
}
} catch (IllegalArgumentException ex) {
@@ -4225,7 +4231,7 @@ public class WifiConfigManager {
newConfig.enterpriseConfig.setDomainSuffixMatch(serverCertInfo.commonName);
}
newConfig.enterpriseConfig.setUserApproveNoCaCert(false);
- // Trigger an update to install CA certifiate and the corresponding configuration.
+ // Trigger an update to install CA certificate and the corresponding configuration.
NetworkUpdateResult result = addOrUpdateNetwork(newConfig, internalConfig.creatorUid);
if (!result.isSuccess()) {
Log.e(TAG, "Failed to install CA cert for network " + internalConfig.SSID);
diff --git a/service/java/com/android/server/wifi/WifiCountryCode.java b/service/java/com/android/server/wifi/WifiCountryCode.java
index 43ecc246fa..7c20bb450e 100644
--- a/service/java/com/android/server/wifi/WifiCountryCode.java
+++ b/service/java/com/android/server/wifi/WifiCountryCode.java
@@ -467,18 +467,22 @@ public class WifiCountryCode {
if (mTelephonyCountryCode != null) {
return;
}
- if (mDriverCountryCode != null
- && !mDriverCountryCode.equalsIgnoreCase(mWorldModeCountryCode)) {
+
+ if (!isCcUpdateGenericEnabledOrDriverCcWorldMode()) {
return;
}
+
+ boolean isUpdateEnabledGeneric = mContext.getResources()
+ .getBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultGeneric);
boolean isUpdateEnabledSetupWizard = mContext.getResources()
.getBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultSetupWizard);
boolean isSetupWizardRunning = mWifiPermissionsUtil.checkNetworkSetupWizardPermission(
targetNetwork.creatorUid) && targetNetwork.lastUpdated != 0
&& (mClock.getWallClockMillis() < (MAX_DURATION_SINCE_LAST_UPDATE_TIME_MS
+ targetNetwork.lastUpdated));
-
- if (!isUpdateEnabledSetupWizard || !isSetupWizardRunning) {
+ boolean isFrameworkCcUpdateEnabled =
+ isUpdateEnabledGeneric || (isUpdateEnabledSetupWizard && isSetupWizardRunning);
+ if (!isFrameworkCcUpdateEnabled) {
return;
}
@@ -503,6 +507,17 @@ public class WifiCountryCode {
updateCountryCode(false);
}
+ private boolean isCcUpdateGenericEnabledOrDriverCcWorldMode() {
+ boolean isUpdateEnabledGeneric = mContext.getResources()
+ .getBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultGeneric);
+ if (isUpdateEnabledGeneric || mDriverCountryCode == null
+ || mDriverCountryCode.equalsIgnoreCase(mWorldModeCountryCode)) {
+ return true;
+ }
+
+ return false;
+ }
+
private String findCountryCodeFromScanResults(List<ScanDetail> scanDetails) {
String selectedCountryCode = null;
int count = 0;
@@ -681,7 +696,7 @@ public class WifiCountryCode {
* Pick up country code base on country code we have.
*
* @param useDriverCountryCodeIfAvailable whether or not to use driver country code
- * if available
+ * if available, and it is only for reporting purpose.
* @return country code base on the use case and current country code we have.
*/
private String pickCountryCode(boolean useDriverCountryCodeIfAvailable) {
@@ -696,8 +711,7 @@ public class WifiCountryCode {
// when driver supported 802.11d.
return mDriverCountryCode;
}
- if (mFrameworkCountryCode != null && (mDriverCountryCode == null
- || mDriverCountryCode.equalsIgnoreCase(mWorldModeCountryCode))) {
+ if (mFrameworkCountryCode != null && isCcUpdateGenericEnabledOrDriverCcWorldMode()) {
return mFrameworkCountryCode;
}
return mSettingsConfigStore.get(WIFI_DEFAULT_COUNTRY_CODE);
diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java
index d97b66cf61..778d8b06e6 100644
--- a/service/java/com/android/server/wifi/WifiMetrics.java
+++ b/service/java/com/android/server/wifi/WifiMetrics.java
@@ -246,7 +246,6 @@ public class WifiMetrics {
private RttMetrics mRttMetrics;
private final PnoScanMetrics mPnoScanMetrics = new PnoScanMetrics();
private final WifiLinkLayerUsageStats mWifiLinkLayerUsageStats = new WifiLinkLayerUsageStats();
- private final TelephonyManager mTelephonyManager;
/** Mapping of radio id values to RadioStats objects. */
private final SparseArray<RadioStats> mRadioStats = new SparseArray<>();
private final ExperimentValues mExperimentValues = new ExperimentValues();
@@ -405,7 +404,6 @@ public class WifiMetrics {
private final SparseIntArray mObservedHotspotR3ApsPerEssInScanHistogram = new SparseIntArray();
private final SparseIntArray mObserved80211mcApInScanHistogram = new SparseIntArray();
- private final IntCounter mCountryCodeScanHistogram = new IntCounter();
// link probing stats
private final IntCounter mLinkProbeSuccessRssiCounts = new IntCounter(-85, -65);
@@ -1555,7 +1553,6 @@ public class WifiMetrics {
setScreenState(context.getSystemService(PowerManager.class).isInteractive());
mScanMetrics = new ScanMetrics(context, clock);
- mTelephonyManager = context.getSystemService(TelephonyManager.class);
}
/** Sets internal ScoringParams member */
@@ -3517,7 +3514,6 @@ public class WifiMetrics {
mWifiLogProto.partialAllSingleScanListenerResults++;
return;
}
- updateCountryCodeScanStats(scanDetails);
Set<ScanResultMatchInfo> ssids = new HashSet<ScanResultMatchInfo>();
int bssids = 0;
@@ -3657,35 +3653,6 @@ public class WifiMetrics {
}
}
- private void updateCountryCodeScanStats(List<ScanDetail> scanDetails) {
- String countryCode = null;
- int countryCodeCount = 0;
- for (ScanDetail scanDetail : scanDetails) {
- NetworkDetail networkDetail = scanDetail.getNetworkDetail();
- String countryCodeCurr = networkDetail.getCountryCode();
- if (countryCodeCurr == null) {
- continue;
- }
- if (countryCode == null) {
- countryCode = countryCodeCurr;
- countryCodeCount = 1;
- continue;
- }
- if (!countryCodeCurr.equalsIgnoreCase(countryCode)) {
- mCountryCodeScanHistogram.increment(COUNTRY_CODE_CONFLICT_WIFI_SCAN);
- return;
- }
- countryCodeCount++;
- }
- String countryCodeTelephony = mTelephonyManager.getNetworkCountryIso();
- if (countryCodeCount > 0 && !TextUtils.isEmpty(countryCodeTelephony)
- && !countryCodeTelephony.equalsIgnoreCase(countryCode)) {
- mCountryCodeScanHistogram.increment(COUNTRY_CODE_CONFLICT_WIFI_SCAN_TELEPHONY);
- return;
- }
- mCountryCodeScanHistogram.increment(Math.min(countryCodeCount, MAX_COUNTRY_CODE_COUNT));
- }
-
/** Increments the occurence of a "Connect to Network" notification. */
public void incrementConnectToNetworkNotification(String notifierTag, int notificationType) {
synchronized (mLock) {
@@ -4232,8 +4199,6 @@ public class WifiMetrics {
pw.println("mWifiLogProto.observed80211mcSupportingApsInScanHistogram"
+ mObserved80211mcApInScanHistogram);
- pw.println("mWifiLogProto.CountryCodeScanHistogram="
- + mCountryCodeScanHistogram.toString());
pw.println("mWifiLogProto.bssidBlocklistStats:");
pw.println(mBssidBlocklistStats.toString());
@@ -5197,7 +5162,6 @@ public class WifiMetrics {
mWifiLogProto.passpointDeauthImminentScope = mPasspointDeauthImminentScope.toProto();
mWifiLogProto.recentFailureAssociationStatus =
mRecentFailureAssociationStatus.toProto();
- mWifiLogProto.countryCodeScanHistogram = mCountryCodeScanHistogram.toProto();
}
}
@@ -5357,7 +5321,6 @@ public class WifiMetrics {
mObservedHotspotR1ApsPerEssInScanHistogram.clear();
mObservedHotspotR2ApsPerEssInScanHistogram.clear();
mObservedHotspotR3ApsPerEssInScanHistogram.clear();
- mCountryCodeScanHistogram.clear();
mSoftApEventListTethered.clear();
mSoftApEventListLocalOnly.clear();
mWifiWakeMetrics.clear();
diff --git a/service/java/com/android/server/wifi/WifiMonitor.java b/service/java/com/android/server/wifi/WifiMonitor.java
index 5dafbc70e1..7e2e503fe1 100644
--- a/service/java/com/android/server/wifi/WifiMonitor.java
+++ b/service/java/com/android/server/wifi/WifiMonitor.java
@@ -40,7 +40,6 @@ import com.android.server.wifi.hotspot2.WnmData;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.HashMap;
@@ -111,8 +110,8 @@ public class WifiMonitor {
/* Transition Disable Indication */
public static final int TRANSITION_DISABLE_INDICATION = BASE + 72;
- /* Trust On First Use Root CA Certification */
- public static final int TOFU_ROOT_CA_CERTIFICATE = BASE + 73;
+ /* Trust On First Use incoming certificate event */
+ public static final int TOFU_CERTIFICATE_EVENT = BASE + 73;
/* Auxiliary supplicant event */
public static final int AUXILIARY_SUPPLICANT_EVENT = BASE + 74;
@@ -665,11 +664,11 @@ public class WifiMonitor {
* @param networkId ID of the network in wpa_supplicant.
* @param ssid SSID of the network.
* @param depth the depth of this cert in the chain, 0 is the leaf, i.e. the server cert.
- * @param cert the certificate data.
+ * @param certificateEventInfo the certificate data.
*/
public void broadcastCertificationEvent(String iface, int networkId, String ssid,
- int depth, X509Certificate cert) {
- sendMessage(iface, TOFU_ROOT_CA_CERTIFICATE, networkId, depth, cert);
+ int depth, CertificateEventInfo certificateEventInfo) {
+ sendMessage(iface, TOFU_CERTIFICATE_EVENT, networkId, depth, certificateEventInfo);
}
/**
diff --git a/service/java/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponse.java b/service/java/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponse.java
index b5d691d6e3..df088b0108 100644
--- a/service/java/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponse.java
+++ b/service/java/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponse.java
@@ -87,11 +87,13 @@ public class GetImsiPseudonymResponse extends Response {
boolean success =
(mAuthResponseCode == RESPONSE_CODE_REQUEST_SUCCESSFUL)
&& (mGetImsiPseudonymResponseCode == RESPONSE_CODE_REQUEST_SUCCESSFUL);
- if (success && (mImsiPseudonym != null) && (mImsiPseudonym.length() <= EAP_MTU)
- && (mRefreshInterval > 0)) {
- pseudonymInfo =
- new PseudonymInfo(mImsiPseudonym, imsi,
- mRefreshInterval * HOUR_IN_MILLIS);
+ if (success && (mImsiPseudonym != null) && (mImsiPseudonym.length() <= EAP_MTU)) {
+ if (mRefreshInterval <= 0) {
+ pseudonymInfo = new PseudonymInfo(mImsiPseudonym, imsi);
+ } else {
+ pseudonymInfo = new PseudonymInfo(mImsiPseudonym, imsi,
+ mRefreshInterval * HOUR_IN_MILLIS);
+ }
}
return Optional.ofNullable(pseudonymInfo);
}
diff --git a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
index 7e47400e78..dc557d65a3 100644
--- a/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
+++ b/service/java/com/android/server/wifi/hotspot2/PasspointManager.java
@@ -24,6 +24,7 @@ import static java.security.cert.PKIXReason.NO_TRUST_ANCHOR;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.ActivityManager;
import android.app.AppOpsManager;
import android.content.Context;
import android.net.MacAddress;
@@ -136,6 +137,7 @@ public class PasspointManager {
private final Clock mClock;
private final WifiPermissionsUtil mWifiPermissionsUtil;
private final WifiSettingsStore mSettingsStore;
+ private final boolean mIsLowMemory;
/**
* Map of package name of an app to the app ops changed listener for the app.
@@ -146,7 +148,7 @@ public class PasspointManager {
private long mProviderIndex;
private boolean mVerboseLoggingEnabled = false;
// Set default value to false before receiving boot completed event.
- private boolean mEnabled = false;;
+ private boolean mEnabled = false;
private class CallbackHandler implements PasspointEventHandler.Callbacks {
private final Context mContext;
@@ -386,6 +388,8 @@ public class PasspointManager {
new SharedDataSourceHandler()));
mPasspointProvisioner = objectFactory.makePasspointProvisioner(context, wifiNative,
this, wifiMetrics);
+ ActivityManager activityManager = context.getSystemService(ActivityManager.class);
+ mIsLowMemory = activityManager.isLowRamDevice();
mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
sPasspointManager = this;
mMacAddressUtil = macAddressUtil;
@@ -486,10 +490,19 @@ public class PasspointManager {
Log.e(TAG, "Set isTrusted to false on a non suggestion passpoint is not allowed");
return false;
}
+ if (config.getServiceFriendlyNames() != null && isFromSuggestion) {
+ Log.e(TAG, "Passpoint from suggestion should not have ServiceFriendlyNames");
+ return false;
+ }
if (!mWifiPermissionsUtil.doesUidBelongToCurrentUserOrDeviceOwner(uid)) {
Log.e(TAG, "UID " + uid + " not visible to the current user");
return false;
}
+ if (getPasspointProviderWithPackage(packageName).size()
+ >= WifiManager.getMaxNumberOfNetworkSuggestionsPerApp(mIsLowMemory)) {
+ Log.e(TAG, "packageName " + packageName + " has too many passpoint with exceed the "
+ + "limitation");
+ }
mWifiCarrierInfoManager.tryUpdateCarrierIdForPasspoint(config);
// Create a provider and install the necessary certificates and keys.
diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
index e5e2594e5b..7d8f75436c 100644
--- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
+++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
@@ -1528,6 +1528,13 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
}
}
+ private void logSmMessage(Message message) {
+ if (mVerboseLoggingEnabled) {
+ logd(getName() + " cmd = " + getWhatToString(message.what) + " "
+ + message.toString());
+ }
+ }
+
// Clear internal data when P2P is shut down due to wifi off or no client.
// For idle shutdown case, there are clients and data should be restored when
// P2P goes back P2pEnabledState.
@@ -1714,7 +1721,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
class DefaultState extends State {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
switch (message.what) {
case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED:
if (message.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
@@ -2252,6 +2259,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
class P2pNotSupportedState extends State {
@Override
public boolean processMessage(Message message) {
+ logSmMessage(message);
switch (message.what) {
case WifiP2pManager.DISCOVER_PEERS:
replyToMessage(message, WifiP2pManager.DISCOVER_PEERS_FAILED,
@@ -2371,7 +2379,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
switch (message.what) {
case WifiP2pMonitor.SUP_DISCONNECTION_EVENT:
if (mVerboseLoggingEnabled) logd("p2p socket connection lost");
@@ -2461,7 +2469,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
boolean wasInWaitingState = WaitingState.wasMessageInWaitingState(message);
switch (message.what) {
case ENABLE_P2P: {
@@ -2598,7 +2606,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
switch (message.what) {
case WifiP2pMonitor.SUP_DISCONNECTION_EVENT:
loge("Unexpected loss of p2p socket connection");
@@ -3045,7 +3053,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
// Re-schedule the shutdown timer since we got the new operation.
// only handle commands from clients.
if (message.what > Protocol.BASE_WIFI_P2P_MANAGER
@@ -3478,7 +3486,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
boolean ret = HANDLED;
switch (message.what) {
case GROUP_CREATING_TIMED_OUT:
@@ -3586,7 +3594,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
switch (message.what) {
case PEER_CONNECTION_USER_ACCEPT:
mWifiNative.p2pStopFind();
@@ -3676,7 +3684,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
switch (message.what) {
case PEER_CONNECTION_USER_ACCEPT:
mWifiNative.p2pStopFind();
@@ -3740,7 +3748,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
WifiP2pProvDiscEvent provDisc = null;
WifiP2pDevice device = null;
switch (message.what) {
@@ -3843,7 +3851,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
switch (message.what) {
// We ignore these right now, since we get a GROUP_STARTED notification
// afterwards
@@ -4116,7 +4124,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
switch (message.what) {
case WifiP2pMonitor.P2P_GO_NEGOTIATION_SUCCESS_EVENT:
case WifiP2pMonitor.P2P_GROUP_FORMATION_SUCCESS_EVENT:
@@ -4206,7 +4214,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
WifiP2pDevice device;
String deviceAddress;
switch (message.what) {
@@ -4628,7 +4636,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
switch (message.what) {
case WifiP2pMonitor.P2P_PROV_DISC_PBC_REQ_EVENT:
case WifiP2pMonitor.P2P_PROV_DISC_ENTER_PIN_EVENT:
@@ -4697,7 +4705,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
@Override
public boolean processMessage(Message message) {
- if (mVerboseLoggingEnabled) logd(getName() + message.toString());
+ logSmMessage(message);
switch (message.what) {
// Group removal ongoing. Multiple calls
// end up removing persisted network. Do nothing.
diff --git a/service/java/com/android/server/wifi/util/InformationElementUtil.java b/service/java/com/android/server/wifi/util/InformationElementUtil.java
index 32ff9e056b..b81bd6a16c 100644
--- a/service/java/com/android/server/wifi/util/InformationElementUtil.java
+++ b/service/java/com/android/server/wifi/util/InformationElementUtil.java
@@ -1570,6 +1570,10 @@ public class InformationElementUtil {
// see section 9.4.2.25 - RSNE - In IEEE Std 802.11-2016
if (buf.remaining() < 2) return;
int rsnCaps = buf.getShort();
+ isManagementFrameProtectionRequired =
+ 0 != (RSN_CAP_MANAGEMENT_FRAME_PROTECTION_REQUIRED & rsnCaps);
+ isManagementFrameProtectionCapable =
+ 0 != (RSN_CAP_MANAGEMENT_FRAME_PROTECTION_CAPABLE & rsnCaps);
if (buf.remaining() < 2) return;
// PMKID, it's not used, drop it if exists (optional).
@@ -1583,10 +1587,6 @@ public class InformationElementUtil {
// Group management cipher suite (optional).
if (buf.remaining() < 4) return;
groupManagementCipher.add(parseRsnCipher(buf.getInt()));
- isManagementFrameProtectionRequired = !groupManagementCipher.isEmpty()
- && 0 != (RSN_CAP_MANAGEMENT_FRAME_PROTECTION_REQUIRED & rsnCaps);
- isManagementFrameProtectionCapable = !groupManagementCipher.isEmpty()
- && 0 != (RSN_CAP_MANAGEMENT_FRAME_PROTECTION_CAPABLE & rsnCaps);
} catch (BufferUnderflowException e) {
Log.e("IE_Capabilities", "Couldn't parse RSNE, buffer underflow");
}
@@ -1940,13 +1940,11 @@ public class InformationElementUtil {
if (isWPS) {
capabilities.append("[WPS]");
}
- if (!groupManagementCipher.isEmpty()) {
- if (isManagementFrameProtectionRequired) {
- capabilities.append("[MFPR]");
- }
- if (isManagementFrameProtectionCapable) {
- capabilities.append("[MFPC]");
- }
+ if (isManagementFrameProtectionRequired) {
+ capabilities.append("[MFPR]");
+ }
+ if (isManagementFrameProtectionCapable) {
+ capabilities.append("[MFPC]");
}
return capabilities.toString();
diff --git a/service/tests/wifitests/Android.bp b/service/tests/wifitests/Android.bp
index 50a9059476..2ed3885d7e 100644
--- a/service/tests/wifitests/Android.bp
+++ b/service/tests/wifitests/Android.bp
@@ -121,6 +121,9 @@ android_test {
"com.android.server.wifi.ByteBufferReader",
"com.android.server.wifi.ByteBufferReader$*",
"com.android.server.wifi.ByteBufferReader.**",
+ "com.android.server.wifi.CertificateEventInfo",
+ "com.android.server.wifi.CertificateEventInfo*",
+ "com.android.server.wifi.CertificateEventInfo.**",
"com.android.server.wifi.ClientMode",
"com.android.server.wifi.ClientMode$*",
"com.android.server.wifi.ClientMode.**",
diff --git a/service/tests/wifitests/src/com/android/server/wifi/CertificateEventInfoTest.java b/service/tests/wifitests/src/com/android/server/wifi/CertificateEventInfoTest.java
new file mode 100644
index 0000000000..4c2662eac2
--- /dev/null
+++ b/service/tests/wifitests/src/com/android/server/wifi/CertificateEventInfoTest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2023 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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+
+import org.junit.Test;
+
+import java.security.cert.X509Certificate;
+
+public class CertificateEventInfoTest extends WifiBaseTest {
+ private static final String TEST_CERT_HASH = "1234567890";
+ CertificateEventInfo mCertificateEventInfo;
+
+ /**
+ * test the getCert() and getCertHash() methods
+ */
+ @Test
+ public void testGetMethods() throws Exception {
+ X509Certificate cert = mock(X509Certificate.class);
+ mCertificateEventInfo = new CertificateEventInfo(cert, TEST_CERT_HASH);
+ assertEquals(mCertificateEventInfo.getCert(), cert);
+ assertTrue(TEST_CERT_HASH.equals(mCertificateEventInfo.getCertHash()));
+ }
+
+ /**
+ * test that a null certificate throws an exception
+ */
+ @Test(expected = NullPointerException.class)
+ public void testCertNullInitializer() throws Exception {
+ mCertificateEventInfo = new CertificateEventInfo(null, TEST_CERT_HASH);
+ }
+
+ /**
+ * test that a null certificate hash throws an exception
+ */
+ @Test(expected = NullPointerException.class)
+ public void testCertHashNullInitializer() throws Exception {
+ X509Certificate cert = mock(X509Certificate.class);
+ mCertificateEventInfo = new CertificateEventInfo(cert, null);
+ }
+}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
index c1cbd2cf8c..5a2dae6a87 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
@@ -8937,11 +8937,13 @@ public class ClientModeImplTest extends WifiBaseTest {
SupplicantState.ASSOCIATED));
mLooper.dispatchAll();
- mCmi.sendMessage(WifiMonitor.TOFU_ROOT_CA_CERTIFICATE,
- FRAMEWORK_NETWORK_ID, 0, FakeKeys.CA_CERT0);
+ CertificateEventInfo certificateEventInfo =
+ spy(new CertificateEventInfo(FakeKeys.CA_CERT0, "1234"));
+ mCmi.sendMessage(WifiMonitor.TOFU_CERTIFICATE_EVENT,
+ FRAMEWORK_NETWORK_ID, 0, certificateEventInfo);
mLooper.dispatchAll();
verify(mInsecureEapNetworkHandler).addPendingCertificate(
- eq(eapTlsConfig.SSID), eq(0), eq(FakeKeys.CA_CERT0));
+ eq(eapTlsConfig.SSID), eq(0), eq(certificateEventInfo));
// Adding a certificate in depth 0 will cause a disconnection when TOFU is supported
DisconnectEventInfo disconnectEventInfo =
diff --git a/service/tests/wifitests/src/com/android/server/wifi/InsecureEapNetworkHandlerTest.java b/service/tests/wifitests/src/com/android/server/wifi/InsecureEapNetworkHandlerTest.java
index 237ef79947..fab7e903f7 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/InsecureEapNetworkHandlerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/InsecureEapNetworkHandlerTest.java
@@ -365,6 +365,63 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
isTrustOnFirstUseSupported, isUserSelected, needUserApproval);
}
+ /**
+ * Verify Trust On First Use flow with server certificate pinning
+ * - Single depth server certificate by signed by some unknown issuer, CA flag not set
+ * - This network is selected by a user.
+ * - Accept the connection.
+ */
+ @Test
+ public void verifyTrustOnFirstUseFlowWithServerCertPinning1() throws Exception {
+ assumeTrue(SdkLevel.isAtLeastT());
+ runServerCertPinningTest("Server", "Issuer", false);
+ }
+
+ /**
+ * Verify Trust On First Use flow with server certificate pinning
+ * - Single depth server certificate by signed by some unknown issuer, CA flag set
+ * - This network is selected by a user.
+ * - Accept the connection.
+ */
+ @Test
+ public void verifyTrustOnFirstUseFlowWithServerCertPinning2() throws Exception {
+ assumeTrue(SdkLevel.isAtLeastT());
+ runServerCertPinningTest("Server", "Issuer", true);
+ }
+
+ /**
+ * Verify Trust On First Use flow with server certificate pinning
+ * - Single depth self-signed server certificate, CA flag not set
+ * - This network is selected by a user.
+ * - Accept the connection.
+ */
+ @Test
+ public void verifyTrustOnFirstUseFlowWithServerCertPinning3() throws Exception {
+ assumeTrue(SdkLevel.isAtLeastT());
+ runServerCertPinningTest("Server-self", "Server-self", false);
+ }
+
+ private void runServerCertPinningTest(String subject, String issuer, boolean isCa)
+ throws Exception {
+ WifiConfiguration config = prepareWifiConfiguration(true);
+ setupTest(config, true, true);
+
+ CertificateEventInfo mockServerCert = generateMockCertEventInfo(subject, issuer, isCa);
+ mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0, mockServerCert);
+ verifyTrustOnFirstUseFlow(config, ACTION_ACCEPT, true,
+ true, false, null, mockServerCert.getCert());
+ }
+
+ private CertificateEventInfo generateMockCertEventInfo(String subject, String issuer,
+ boolean isCa) {
+ CertificateEventInfo certificateEventInfo = mock(CertificateEventInfo.class);
+ X509Certificate cert = generateMockCert(subject, issuer, isCa);
+
+ when(certificateEventInfo.getCert()).thenReturn(cert);
+ when(certificateEventInfo.getCertHash()).thenReturn("12345678");
+ return certificateEventInfo;
+ }
+
private X509Certificate generateMockCert(String subject, String issuer, boolean isCa) {
X509Certificate mockCert = mock(X509Certificate.class);
X500Principal mockSubjectPrincipal = mock(X500Principal.class);
@@ -489,35 +546,13 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
WifiConfiguration config = prepareWifiConfiguration(isAtLeastT);
setupTest(config, isAtLeastT, isTrustOnFirstUseSupported);
- X509Certificate mockCaCert = generateMockCert("ca", "ca", true);
- X509Certificate mockServerCert = generateMockCert("server", "ca", false);
+ CertificateEventInfo mockCaCert = generateMockCertEventInfo("ca", "ca", true);
+ CertificateEventInfo mockServerCert = generateMockCertEventInfo("server", "ca", false);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 1, mockCaCert);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0, mockServerCert);
verifyTrustOnFirstUseFlow(config, ACTION_ACCEPT, isTrustOnFirstUseSupported,
- isUserSelected, needUserApproval, mockCaCert, mockServerCert);
- }
-
- /**
- * Verify Trust On First Use flow with a self-signed CA cert.
- * - This network is selected by a user.
- * - Accept the connection.
- */
- @Test
- public void verifyTrustOnFirstUseAcceptWhenConnectByUserWithSelfSignedCaCert()
- throws Exception {
- assumeTrue(SdkLevel.isAtLeastT());
- boolean isAtLeastT = true, isTrustOnFirstUseSupported = true, isUserSelected = true;
- boolean needUserApproval = true;
-
- WifiConfiguration config = prepareWifiConfiguration(isAtLeastT);
- setupTest(config, isAtLeastT, isTrustOnFirstUseSupported);
-
- X509Certificate mockSelfSignedCert = generateMockCert("self", "self", false);
- mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0, mockSelfSignedCert);
-
- verifyTrustOnFirstUseFlow(config, ACTION_ACCEPT, isTrustOnFirstUseSupported,
- isUserSelected, needUserApproval, mockSelfSignedCert, mockSelfSignedCert);
+ isUserSelected, needUserApproval, mockCaCert.getCert(), mockServerCert.getCert());
}
/**
@@ -535,11 +570,12 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
WifiConfiguration config = prepareWifiConfiguration(isAtLeastT);
setupTest(config, isAtLeastT, isTrustOnFirstUseSupported);
- X509Certificate mockSelfSignedCert = generateMockCert("self", "self", false);
+ CertificateEventInfo mockSelfSignedCert = generateMockCertEventInfo("self", "self", false);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0, mockSelfSignedCert);
verifyTrustOnFirstUseFlow(config, ACTION_FORGET, isTrustOnFirstUseSupported,
- isUserSelected, needUserApproval, mockSelfSignedCert, mockSelfSignedCert);
+ isUserSelected, needUserApproval, mockSelfSignedCert.getCert(),
+ mockSelfSignedCert.getCert());
}
/**
@@ -580,9 +616,9 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
setupTest(config, isAtLeastT, isTrustOnFirstUseSupported);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 1,
- generateMockCert("ca", "ca", true));
+ generateMockCertEventInfo("ca", "ca", true));
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0,
- generateMockCert("server", "ca", false));
+ generateMockCertEventInfo("server", "ca", false));
mInsecureEapNetworkHandler.startUserApprovalIfNecessary(isUserSelected);
assertTrue(config.enterpriseConfig.isTrustOnFirstUseEnabled());
@@ -608,37 +644,15 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
isInsecureEnterpriseConfigurationAllowed);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 1,
- generateMockCert("ca", "ca", true));
+ generateMockCertEventInfo("ca", "ca", true));
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0,
- generateMockCert("server", "ca", false));
+ generateMockCertEventInfo("server", "ca", false));
mInsecureEapNetworkHandler.startUserApprovalIfNecessary(isUserSelected);
verify(mCallbacks, never()).onError(any());
}
/**
- * Verify that it reports errors if the cert chain is headless.
- */
- @Test
- public void verifyOnErrorWithHeadlessCertChain() throws Exception {
- assumeTrue(SdkLevel.isAtLeastT());
- boolean isAtLeastT = true, isTrustOnFirstUseSupported = true, isUserSelected = true;
-
- WifiConfiguration config = prepareWifiConfiguration(isAtLeastT);
- setupTest(config, isAtLeastT, isTrustOnFirstUseSupported);
-
- // Missing root CA cert.
- mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0,
- generateMockCert("server", "ca", false));
-
- mInsecureEapNetworkHandler.startUserApprovalIfNecessary(isUserSelected);
- verify(mCallbacks).onError(eq(config.SSID));
- verify(mWifiConfigManager, atLeastOnce()).updateNetworkSelectionStatus(eq(config.networkId),
- eq(WifiConfiguration.NetworkSelectionStatus
- .DISABLED_BY_WIFI_MANAGER));
- }
-
- /**
* Verify that is reports errors if the server cert issuer does not match the parent subject.
*/
@Test
@@ -649,9 +663,10 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
WifiConfiguration config = prepareWifiConfiguration(isAtLeastT);
setupTest(config, isAtLeastT, isTrustOnFirstUseSupported);
- X509Certificate mockCaCert = generateMockCert("ca", "ca", true);
+ CertificateEventInfo mockCaCert = generateMockCertEventInfo("ca", "ca", true);
// Missing intermediate cert.
- X509Certificate mockServerCert = generateMockCert("server", "intermediate", false);
+ CertificateEventInfo mockServerCert = generateMockCertEventInfo("server", "intermediate",
+ false);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 1, mockCaCert);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0, mockServerCert);
@@ -681,7 +696,7 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
mCallbacks,
WIFI_IFACE_NAME,
mHandler);
- X509Certificate mockSelfSignedCert = generateMockCert("self", "self", false);
+ CertificateEventInfo mockSelfSignedCert = generateMockCertEventInfo("self", "self", false);
mInsecureEapNetworkHandler.addPendingCertificate("NotExist", 0, mockSelfSignedCert);
}
@@ -695,12 +710,12 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
// Missing root CA cert.
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0,
- generateMockCert("server", "ca", false));
+ generateMockCertEventInfo("server", "ca", false));
// The wrong cert chain should be cleared after this call.
mInsecureEapNetworkHandler.prepareConnection(config);
- X509Certificate mockSelfSignedCert = generateMockCert("self", "self", false);
+ CertificateEventInfo mockSelfSignedCert = generateMockCertEventInfo("self", "self", false);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0, mockSelfSignedCert);
mInsecureEapNetworkHandler.startUserApprovalIfNecessary(isUserSelected);
@@ -715,7 +730,7 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
WifiConfiguration config = prepareWifiConfiguration(isAtLeastT);
setupTest(config, isAtLeastT, isTrustOnFirstUseSupported);
- X509Certificate mockSelfSignedCert = generateMockCert("self", "self", false);
+ CertificateEventInfo mockSelfSignedCert = generateMockCertEventInfo("self", "self", false);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0, mockSelfSignedCert);
// Pass another PSK config which is not the same as the current one.
@@ -737,16 +752,16 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
private void verifyTrustOnFirstUseFlowWithDefaultCerts(WifiConfiguration config,
int action, boolean isTrustOnFirstUseSupported, boolean isUserSelected,
boolean needUserApproval) throws Exception {
- X509Certificate mockCaCert = generateMockCert("ca", "ca", true);
- X509Certificate mockServerCert = generateMockCert("server", "middle", false);
+ CertificateEventInfo mockCaCert = generateMockCertEventInfo("ca", "ca", true);
+ CertificateEventInfo mockServerCert = generateMockCertEventInfo("server", "middle", false);
if (isTrustOnFirstUseSupported) {
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 2, mockCaCert);
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 1,
- generateMockCert("middle", "ca", false));
+ generateMockCertEventInfo("middle", "ca", false));
mInsecureEapNetworkHandler.addPendingCertificate(config.SSID, 0, mockServerCert);
}
verifyTrustOnFirstUseFlow(config, action, isTrustOnFirstUseSupported,
- isUserSelected, needUserApproval, mockCaCert, mockServerCert);
+ isUserSelected, needUserApproval, mockCaCert.getCert(), mockServerCert.getCert());
}
private void verifyTrustOnFirstUseFlow(WifiConfiguration config,
@@ -763,7 +778,7 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
any(), dialogMessageCaptor.capture(), any(), anyInt(), anyInt(), any(), any(),
any(), dialogCallbackCaptor.capture(), any());
if (isTrustOnFirstUseSupported) {
- assertTofuDialogMessage(expectedCaCert, expectedServerCert,
+ assertTofuDialogMessage(expectedServerCert,
dialogMessageCaptor.getValue());
}
if (action == ACTION_ACCEPT) {
@@ -790,7 +805,7 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
verify(mWifiDialogManager).createLegacySimpleDialogWithUrl(
any(), dialogMessageCaptor.capture(), any(), anyInt(), anyInt(), any(),
any(), any(), dialogCallbackCaptor.capture(), any());
- assertTofuDialogMessage(expectedCaCert, expectedServerCert,
+ assertTofuDialogMessage(expectedServerCert,
dialogMessageCaptor.getValue());
if (action == ACTION_ACCEPT) {
dialogCallbackCaptor.getValue().onPositiveButtonClicked();
@@ -816,11 +831,19 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
verify(mWifiConfigManager).updateNetworkSelectionStatus(eq(config.networkId),
eq(WifiConfiguration.NetworkSelectionStatus.DISABLED_NONE));
if (isTrustOnFirstUseSupported) {
- verify(mWifiConfigManager).updateCaCertificate(
- eq(config.networkId), eq(expectedCaCert), eq(expectedServerCert));
+ if (expectedCaCert == null) {
+ // Simulate server cert pinning case where there is no Root CA
+ verify(mWifiConfigManager).updateCaCertificate(
+ eq(config.networkId), eq(expectedServerCert), eq(expectedServerCert),
+ eq("12345678")); // Server certificate hash
+ } else {
+ verify(mWifiConfigManager).updateCaCertificate(
+ eq(config.networkId), eq(expectedCaCert), eq(expectedServerCert),
+ eq(null)); // Cert pinning not used
+ }
} else {
verify(mWifiConfigManager, never()).updateCaCertificate(
- anyInt(), any(), any());
+ anyInt(), any(), any(), any());
}
verify(mCallbacks).onAccept(eq(config.SSID), eq(config.networkId));
} else if (action == ACTION_REJECT) {
@@ -840,7 +863,6 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
}
private void assertTofuDialogMessage(
- X509Certificate rootCaCert,
X509Certificate serverCert,
String message) {
CertificateSubjectInfo serverCertSubjectInfo =
@@ -880,8 +902,8 @@ public class InsecureEapNetworkHandlerTest extends WifiBaseTest {
*/
@Test
public void verifyGetDigest() throws Exception {
- X509Certificate mockServerCert = generateMockCert("server", "ca", false);
- assertEquals(mInsecureEapNetworkHandler.getDigest(mockServerCert, "SHA256"),
- TEST_EXPECTED_SHA_256_SIGNATURE);
+ CertificateEventInfo mockServerCert = generateMockCertEventInfo("server", "ca", false);
+ assertEquals(TEST_EXPECTED_SHA_256_SIGNATURE,
+ mInsecureEapNetworkHandler.getDigest(mockServerCert.getCert(), "SHA256"));
}
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java
index f7bbc1ed85..e707d5e2b3 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/InterfaceConflictManagerTest.java
@@ -70,7 +70,7 @@ import java.util.Collections;
* Unit test harness for InterfaceConflictManager.
*/
@SmallTest
-public class InterfaceConflictManagerTest {
+public class InterfaceConflictManagerTest extends WifiBaseTest{
private TestLooper mTestLooper;
private InterfaceConflictManager mDut;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionStoreDataTest.java b/service/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionStoreDataTest.java
index abaa8e4e8a..c86e7a0d51 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionStoreDataTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionStoreDataTest.java
@@ -525,11 +525,6 @@ public class NetworkSuggestionStoreDataTest extends WifiBaseTest {
homeSp.setFqdn(fqdn);
homeSp.setFriendlyName(friendlyName);
config.setHomeSp(homeSp);
- Map<String, String> friendlyNames = new HashMap<>();
- friendlyNames.put("en", friendlyName);
- friendlyNames.put("kr", friendlyName + 1);
- friendlyNames.put("jp", friendlyName + 2);
- config.setServiceFriendlyNames(friendlyNames);
Credential credential = new Credential();
credential.setRealm(TEST_REALM);
credential.setCaCertificate(FakeKeys.CA_CERT0);
diff --git a/service/tests/wifitests/src/com/android/server/wifi/QosPolicyRequestHandlerTest.java b/service/tests/wifitests/src/com/android/server/wifi/QosPolicyRequestHandlerTest.java
index 2e58304098..8f7f78f0d1 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/QosPolicyRequestHandlerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/QosPolicyRequestHandlerTest.java
@@ -56,7 +56,7 @@ import org.mockito.stubbing.Answer;
import java.util.ArrayList;
import java.util.List;
-public class QosPolicyRequestHandlerTest {
+public class QosPolicyRequestHandlerTest extends WifiBaseTest{
private static final String TEST_IFACE_NAME = "mockWlan";
private static final byte[] TEST_INET_ADDR = {127, 0, 0, 1};
private static final int QOS_REQUEST_DIALOG_TOKEN = 124;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ScanDetailCacheTest.java b/service/tests/wifitests/src/com/android/server/wifi/ScanDetailCacheTest.java
index 4369a9af55..ba3a9fdc19 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ScanDetailCacheTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ScanDetailCacheTest.java
@@ -32,7 +32,7 @@ import org.mockito.MockitoAnnotations;
* Unit tests for {@link com.android.server.wifi.ScanDetailCache}.
*/
@SmallTest
-public class ScanDetailCacheTest {
+public class ScanDetailCacheTest extends WifiBaseTest {
private static final int TEST_MAX_SIZE = 5;
private static final int TEST_TRIM_SIZE = 2;
private static final String TEST_BSSID_1 = "0a:08:5c:67:89:01";
diff --git a/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java b/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java
index a2cd15161b..6efeec6ebf 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java
@@ -58,7 +58,7 @@ import java.util.Map;
* which service (HIDL or AIDL) is available. Test the initialization logic and
* verify that calls to all public methods are forwarded to the actual implementation.
*/
-public class SupplicantStaIfaceHalTest {
+public class SupplicantStaIfaceHalTest extends WifiBaseTest {
private SupplicantStaIfaceHalSpy mDut;
private @Mock SupplicantStaIfaceHalHidlImpl mStaIfaceHalHidlMock;
private @Mock SupplicantStaIfaceHalAidlImpl mStaIfaceHalAidlMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImplTest.java
index 78b9316f02..2c52db920c 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/SupplicantStaNetworkCallbackAidlImplTest.java
@@ -15,6 +15,8 @@
*/
package com.android.server.wifi;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
@@ -32,6 +34,7 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoSession;
@@ -92,9 +95,14 @@ public class SupplicantStaNetworkCallbackAidlImplTest extends WifiBaseTest {
public void testOnCertificateSuccess() throws Exception {
mSupplicantStaNetworkCallbackAidlImpl.onServerCertificateAvailable(
0, "subject".getBytes(), "certHash".getBytes(), "cert".getBytes());
+ ArgumentCaptor<CertificateEventInfo> certificateEventInfoArgumentCaptor =
+ ArgumentCaptor.forClass(CertificateEventInfo.class);
verify(mWifiMonitor).broadcastCertificationEvent(
- eq(TEST_INTERFACE), eq(TEST_NETWORK_ID),
- eq(TEST_SSID), eq(0), eq(mX509Certificate));
+ eq(TEST_INTERFACE), eq(TEST_NETWORK_ID), eq(TEST_SSID), eq(0),
+ certificateEventInfoArgumentCaptor.capture());
+
+ assertEquals(mX509Certificate, certificateEventInfoArgumentCaptor.getValue().getCert());
+ assertTrue("certHash".equals(certificateEventInfoArgumentCaptor.getValue().getCertHash()));
}
/** verify onServerCertificateAvailable with illegal arguments. */
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiBlocklistMonitorTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiBlocklistMonitorTest.java
index 5b9faf9844..64e266ceac 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiBlocklistMonitorTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiBlocklistMonitorTest.java
@@ -59,7 +59,7 @@ import java.util.concurrent.TimeUnit;
* Unit tests for {@link com.android.server.wifi.WifiBlocklistMonitor}.
*/
@SmallTest
-public class WifiBlocklistMonitorTest {
+public class WifiBlocklistMonitorTest extends WifiBaseTest {
private static final int TEST_NUM_MAX_FIRMWARE_SUPPORT_BSSIDS = 3;
private static final int TEST_NUM_MAX_FIRMWARE_SUPPORT_SSIDS = 3;
private static final String TEST_SSID_1 = "\"TestSSID1\"";
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoStoreManagerDataTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoStoreManagerDataTest.java
index 229ee45e7c..a37450a7a0 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoStoreManagerDataTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiCarrierInfoStoreManagerDataTest.java
@@ -43,7 +43,7 @@ import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
-public class WifiCarrierInfoStoreManagerDataTest {
+public class WifiCarrierInfoStoreManagerDataTest extends WifiBaseTest {
private static final int TEST_CARRIER_ID = 1911;
private static final int TEST_SUB_ID = 3;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
index 54d3265f34..d622534f64 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
@@ -7683,13 +7683,10 @@ public class WifiConfigManagerTest extends WifiBaseTest {
when(mPrimaryClientModeManager.getSupportedFeatures()).thenReturn(
WifiManager.WIFI_FEATURE_TRUST_ON_FIRST_USE);
- int openNetId = verifyAddNetwork(WifiConfigurationTestUtil.createOpenNetwork(), true);
int eapPeapNetId = verifyAddNetwork(prepareTofuEapConfig(
WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.NONE), true);
- int eapSimNetId = verifyAddNetwork(WifiConfigurationTestUtil.createEapNetwork(
- WifiEnterpriseConfig.Eap.SIM, WifiEnterpriseConfig.Phase2.NONE), true);
assertTrue(mWifiConfigManager.updateCaCertificate(eapPeapNetId, FakeKeys.CA_CERT0,
- FakeKeys.CA_CERT1));
+ FakeKeys.CA_CERT1, null));
WifiConfiguration config = mWifiConfigManager.getConfiguredNetwork(eapPeapNetId);
assertFalse(config.enterpriseConfig.isTrustOnFirstUseEnabled());
assertFalse(config.enterpriseConfig.isUserApproveNoCaCert());
@@ -7714,7 +7711,7 @@ public class WifiConfigManagerTest extends WifiBaseTest {
"C=TW,ST=Taiwan,L=Taipei,O=Google,CN=mockServerCert");
assertTrue(mWifiConfigManager.updateCaCertificate(eapPeapNetId, FakeKeys.CA_CERT0,
- mockServerCert));
+ mockServerCert, "1234"));
WifiConfiguration config = mWifiConfigManager.getConfiguredNetwork(eapPeapNetId);
assertFalse(config.enterpriseConfig.isTrustOnFirstUseEnabled());
assertFalse(config.enterpriseConfig.isUserApproveNoCaCert());
@@ -7752,7 +7749,7 @@ public class WifiConfigManagerTest extends WifiBaseTest {
when(mockServerCert.getSubjectAlternativeNames()).thenReturn(altNames);
assertTrue(mWifiConfigManager.updateCaCertificate(eapPeapNetId, FakeKeys.CA_CERT0,
- mockServerCert));
+ mockServerCert, "1234"));
WifiConfiguration config = mWifiConfigManager.getConfiguredNetwork(eapPeapNetId);
assertFalse(config.enterpriseConfig.isTrustOnFirstUseEnabled());
assertFalse(config.enterpriseConfig.isUserApproveNoCaCert());
@@ -7775,18 +7772,18 @@ public class WifiConfigManagerTest extends WifiBaseTest {
// Invalid network id
assertFalse(mWifiConfigManager.updateCaCertificate(-1, FakeKeys.CA_CERT0,
- FakeKeys.CA_CERT1));
+ FakeKeys.CA_CERT1, "1234"));
// Not an enterprise network
assertFalse(mWifiConfigManager.updateCaCertificate(openNetId, FakeKeys.CA_CERT0,
- FakeKeys.CA_CERT1));
+ FakeKeys.CA_CERT1, "1234"));
// Not a certificate baseed enterprise network
assertFalse(mWifiConfigManager.updateCaCertificate(eapSimNetId, FakeKeys.CA_CERT0,
- FakeKeys.CA_CERT1));
+ FakeKeys.CA_CERT1, "1234"));
// No cert
- assertFalse(mWifiConfigManager.updateCaCertificate(eapPeapNetId, null, null));
+ assertFalse(mWifiConfigManager.updateCaCertificate(eapPeapNetId, null, null, null));
// No valid subject
X509Certificate mockServerCert = mock(X509Certificate.class);
@@ -7794,24 +7791,19 @@ public class WifiConfigManagerTest extends WifiBaseTest {
when(mockServerCert.getSubjectX500Principal()).thenReturn(mockSubjectPrincipal);
when(mockSubjectPrincipal.getName()).thenReturn("");
assertFalse(mWifiConfigManager.updateCaCertificate(eapPeapNetId, FakeKeys.CA_CERT0,
- mockServerCert));
+ mockServerCert, "1234"));
}
@Test
public void testUpdateCaCertificateSuccessWithSelfSignedCertificate() throws Exception {
when(mPrimaryClientModeManager.getSupportedFeatures()).thenReturn(
WifiManager.WIFI_FEATURE_TRUST_ON_FIRST_USE);
-
- int openNetId = verifyAddNetwork(WifiConfigurationTestUtil.createOpenNetwork(), true);
int eapPeapNetId = verifyAddNetwork(prepareTofuEapConfig(
WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.NONE), true);
- int eapSimNetId = verifyAddNetwork(WifiConfigurationTestUtil.createEapNetwork(
- WifiEnterpriseConfig.Eap.SIM, WifiEnterpriseConfig.Phase2.NONE), true);
-
X509Certificate mockCaCert = mock(X509Certificate.class);
when(mockCaCert.getBasicConstraints()).thenReturn(-1);
assertTrue(mWifiConfigManager.updateCaCertificate(eapPeapNetId, mockCaCert,
- FakeKeys.CA_CERT1));
+ FakeKeys.CA_CERT1, null));
WifiConfiguration config = mWifiConfigManager.getConfiguredNetwork(eapPeapNetId);
assertFalse(config.enterpriseConfig.isTrustOnFirstUseEnabled());
assertFalse(config.enterpriseConfig.isUserApproveNoCaCert());
@@ -7819,21 +7811,30 @@ public class WifiConfigManagerTest extends WifiBaseTest {
}
@Test
+ public void testUpdateServerCertificateHashSuccess() throws Exception {
+ when(mPrimaryClientModeManager.getSupportedFeatures()).thenReturn(
+ WifiManager.WIFI_FEATURE_TRUST_ON_FIRST_USE);
+ int eapPeapNetId = verifyAddNetwork(prepareTofuEapConfig(
+ WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.NONE), true);
+ assertTrue(mWifiConfigManager.updateCaCertificate(eapPeapNetId, FakeKeys.CA_CERT1,
+ FakeKeys.CA_CERT1, "1234"));
+ WifiConfiguration config = mWifiConfigManager.getConfiguredNetwork(eapPeapNetId);
+ assertFalse(config.enterpriseConfig.isTrustOnFirstUseEnabled());
+ assertFalse(config.enterpriseConfig.isUserApproveNoCaCert());
+ assertEquals("hash://server/sha256/1234", config.enterpriseConfig.getCaCertificateAlias());
+ }
+
+ @Test
public void testUpdateCaCertificateFailureWithSelfSignedCertificateAndTofuNotEnabled()
throws Exception {
when(mPrimaryClientModeManager.getSupportedFeatures()).thenReturn(
WifiManager.WIFI_FEATURE_TRUST_ON_FIRST_USE);
-
- int openNetId = verifyAddNetwork(WifiConfigurationTestUtil.createOpenNetwork(), true);
int eapPeapNetId = verifyAddNetwork(WifiConfigurationTestUtil.createEapNetwork(
WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.NONE), true);
- int eapSimNetId = verifyAddNetwork(WifiConfigurationTestUtil.createEapNetwork(
- WifiEnterpriseConfig.Eap.SIM, WifiEnterpriseConfig.Phase2.NONE), true);
-
X509Certificate mockCaCert = mock(X509Certificate.class);
when(mockCaCert.getBasicConstraints()).thenReturn(-1);
assertFalse(mWifiConfigManager.updateCaCertificate(eapPeapNetId, mockCaCert,
- FakeKeys.CA_CERT1));
+ FakeKeys.CA_CERT1, null));
WifiConfiguration config = mWifiConfigManager.getConfiguredNetwork(eapPeapNetId);
assertEquals(null, config.enterpriseConfig.getCaCertificate());
}
@@ -7842,7 +7843,6 @@ public class WifiConfigManagerTest extends WifiBaseTest {
public void testUpdateNetworkWithCreatorOverride() {
WifiConfiguration config = WifiConfigurationTestUtil.createOpenNetwork();
int openNetId = verifyAddNetwork(WifiConfigurationTestUtil.createOpenNetwork(), true);
-
assertEquals(TEST_CREATOR_UID, mWifiConfigManager
.getConfiguredNetwork(openNetId).creatorUid);
config.networkId = openNetId;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiCountryCodeTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiCountryCodeTest.java
index 52cc63a519..35275e27b3 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiCountryCodeTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiCountryCodeTest.java
@@ -186,6 +186,7 @@ public class WifiCountryCodeTest extends WifiBaseTest {
mDriverSupportedNl80211RegChangedEvent);
mResources.setBoolean(R.bool.config_wifiForcedSoftApRestartWhenCountryCodeChanged,
mForcedSoftApRestateWhenCountryCodeChanged);
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultGeneric, false);
mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultSetupWizard, true);
when(mWifiPermissionsUtil.checkNetworkSetupWizardPermission(anyInt())).thenReturn(true);
mResources.setString(R.string.config_wifiDriverWorldModeCountryCode, mWorldModeCountryCode);
@@ -758,7 +759,6 @@ public class WifiCountryCodeTest extends WifiBaseTest {
assertEquals(mTelephonyCountryCode, mWifiCountryCode.getCurrentDriverCountryCode());
}
-
@Test
public void testUpdateountryCodeSetupWizardDisabled() {
mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultSetupWizard, false);
@@ -846,4 +846,63 @@ public class WifiCountryCodeTest extends WifiBaseTest {
mWifiConfig.lastUpdated = 1000L;
when(mClock.getWallClockMillis()).thenReturn(5000L);
}
+
+ @Test
+ public void testUpdateountryCodeGenericDisabled() {
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultGeneric, false);
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultSetupWizard, false);
+ mWifiCountryCode.updateCountryCodeFromScanResults(mScanDetails, mWifiConfig);
+ assertEquals(mDefaultCountryCode, mWifiCountryCode.getCountryCode());
+ }
+
+ @Test
+ public void testUpdateountryCodeGenericEnabled() {
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultGeneric, true);
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultSetupWizard, false);
+ mWifiCountryCode.updateCountryCodeFromScanResults(mScanDetails, mWifiConfig);
+ assertEquals(TEST_COUNTRY_CODE, mWifiCountryCode.getCountryCode());
+
+ mResources.setBoolean(R.bool.config_wifiDriverSupportedNl80211RegChangedEvent, false);
+ mChangeListenerCaptor.getValue().onSetCountryCodeSucceeded(TEST_COUNTRY_CODE_2);
+ mScanDetails = setupScanDetails(TEST_COUNTRY_CODE_2);
+ mWifiCountryCode.updateCountryCodeFromScanResults(mScanDetails, mWifiConfig);
+ assertEquals(TEST_COUNTRY_CODE_2, mWifiCountryCode.getCountryCode());
+ }
+
+ @Test
+ public void testUpdateCountryCodeGenericWithTelephonyCountryCode() {
+ when(mTelephonyManager.getNetworkCountryIso()).thenReturn(TEST_COUNTRY_CODE_2);
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultGeneric, true);
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultSetupWizard, false);
+ mWifiCountryCode.updateCountryCodeFromScanResults(mScanDetails, mWifiConfig);
+ assertEquals(TEST_COUNTRY_CODE_2, mWifiCountryCode.getCountryCode());
+ }
+
+ @Test
+ public void testUpdateountryCodeGenericMismatchScanResult() {
+ when(mNetworkDetail2.getCountryCode()).thenReturn(TEST_COUNTRY_CODE_2);
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultGeneric, true);
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultSetupWizard, false);
+ mWifiCountryCode.updateCountryCodeFromScanResults(mScanDetails, mWifiConfig);
+ assertEquals(mDefaultCountryCode, mWifiCountryCode.getCountryCode());
+ }
+
+ @Test
+ public void testUpdateountryCodeGenericOneGoodScanResult() {
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultGeneric, true);
+ mScanResult2.level = WifiCountryCode.MIN_SCAN_RSSI_DBM - 1;
+ mWifiCountryCode.updateCountryCodeFromScanResults(mScanDetails, mWifiConfig);
+ assertEquals(mDefaultCountryCode, mWifiCountryCode.getCountryCode());
+ }
+
+ @Test
+ public void testUpdateountryCodeGenericTwoGoodScanResultUs() {
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultGeneric, true);
+ mResources.setBoolean(R.bool.config_wifiUpdateCountryCodeFromScanResultSetupWizard, false);
+ mScanDetails = setupScanDetails("US");
+ mDefaultCountryCode = "CA";
+ when(mSettingsConfigStore.get(WIFI_DEFAULT_COUNTRY_CODE)).thenReturn(mDefaultCountryCode);
+ mWifiCountryCode.updateCountryCodeFromScanResults(mScanDetails, mWifiConfig);
+ assertEquals(mDefaultCountryCode, mWifiCountryCode.getCountryCode());
+ }
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
index 075a5cbeec..9b97d80be6 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
@@ -198,7 +198,6 @@ public class WifiMetricsTest extends WifiBaseTest {
@Mock PowerManager mPowerManager;
@Mock WifiMonitor mWifiMonitor;
@Mock ActiveModeWarden mActiveModeWarden;
- @Mock TelephonyManager mTelephonyManager;
@Captor ArgumentCaptor<BroadcastReceiver> mBroadcastReceiverCaptor;
@Captor ArgumentCaptor<ActiveModeWarden.ModeChangeCallback> mModeChangeCallbackArgumentCaptor;
@@ -214,8 +213,6 @@ public class WifiMetricsTest extends WifiBaseTest {
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getSystemService(PowerManager.class)).thenReturn(mPowerManager);
when(mPowerManager.isInteractive()).thenReturn(true);
- when(mTelephonyManager.getNetworkCountryIso()).thenReturn("US");
- when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
mWifiMetrics = new WifiMetrics(mContext, mFacade, mClock, mTestLooper.getLooper(),
new WifiAwareMetrics(mClock), new RttMetrics(mClock), mWifiPowerMetrics,
mWifiP2pMetrics, mDppMetrics, mWifiMonitor);
@@ -3265,45 +3262,6 @@ public class WifiMetricsTest extends WifiBaseTest {
a(0, 2, WifiMetrics.MAX_TOTAL_80211MC_APS_BUCKET), a(1, 2, 1));
}
- /**
- * Test that country code stats are collected correctly
- */
- @Test
- public void testCountryCodeStats() throws Exception {
- ScanDetail mockScanDetailUs = mock(ScanDetail.class);
- ScanDetail mockScanDetailNonUs = mock(ScanDetail.class);
- NetworkDetail mockNetworkDetailUs = mock(NetworkDetail.class);
- NetworkDetail mockNetworkDetailNonUs = mock(NetworkDetail.class);
- when(mockNetworkDetailUs.getCountryCode()).thenReturn("US");
- when(mockNetworkDetailNonUs.getCountryCode()).thenReturn("CA");
- ScanResult mockScanResult = mock(ScanResult.class);
- mockScanResult.capabilities = "";
- when(mockScanDetailUs.getScanResult()).thenReturn(mockScanResult);
- when(mockScanDetailNonUs.getScanResult()).thenReturn(mockScanResult);
- when(mockScanDetailUs.getNetworkDetail()).thenReturn(mockNetworkDetailUs);
- when(mockScanDetailNonUs.getNetworkDetail()).thenReturn(mockNetworkDetailNonUs);
- List<ScanDetail> scan = new ArrayList<ScanDetail>();
-
- for (int i = 0; i < (WifiMetrics.MAX_COUNTRY_CODE_COUNT + 1); i++) {
- scan.add(mockScanDetailUs);
- }
- mWifiMetrics.incrementAvailableNetworksHistograms(scan, true);
- when(mTelephonyManager.getNetworkCountryIso()).thenReturn("CA");
- mWifiMetrics.incrementAvailableNetworksHistograms(scan, true);
- scan.add(mockScanDetailNonUs);
- mWifiMetrics.incrementAvailableNetworksHistograms(scan, true);
-
- dumpProtoAndDeserialize();
-
- Int32Count[] expectedCountryCodeScanHistogram = {
- buildInt32Count(WifiMetrics.COUNTRY_CODE_CONFLICT_WIFI_SCAN_TELEPHONY, 1),
- buildInt32Count(WifiMetrics.COUNTRY_CODE_CONFLICT_WIFI_SCAN, 1),
- buildInt32Count(WifiMetrics.MAX_COUNTRY_CODE_COUNT, 1),
- };
- assertKeyCountsEqual(expectedCountryCodeScanHistogram,
- mDecodedProto.countryCodeScanHistogram);
- }
-
/**
* Test Open Network Notification blocklist size and feature state are not cleared when proto
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java
index 2fd0ab1d6c..c077620ab6 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiMonitorTest.java
@@ -53,7 +53,6 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
-import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;
@@ -778,18 +777,20 @@ public class WifiMonitorTest extends WifiBaseTest {
public void testBroadcastCertificateEvent() {
final int depth = 2;
mWifiMonitor.registerHandler(
- WLAN_IFACE_NAME, WifiMonitor.TOFU_ROOT_CA_CERTIFICATE, mHandlerSpy);
+ WLAN_IFACE_NAME, WifiMonitor.TOFU_CERTIFICATE_EVENT, mHandlerSpy);
mWifiMonitor.broadcastCertificationEvent(
- WLAN_IFACE_NAME, NETWORK_ID, SSID, depth, FakeKeys.CA_CERT0);
+ WLAN_IFACE_NAME, NETWORK_ID, SSID, depth,
+ new CertificateEventInfo(FakeKeys.CA_CERT0, "1234"));
mLooper.dispatchAll();
ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
verify(mHandlerSpy).handleMessage(messageCaptor.capture());
- assertEquals(WifiMonitor.TOFU_ROOT_CA_CERTIFICATE, messageCaptor.getValue().what);
+ assertEquals(WifiMonitor.TOFU_CERTIFICATE_EVENT, messageCaptor.getValue().what);
assertEquals(NETWORK_ID, messageCaptor.getValue().arg1);
assertEquals(depth, messageCaptor.getValue().arg2);
- X509Certificate cert = (X509Certificate) messageCaptor.getValue().obj;
- assertEquals(FakeKeys.CA_CERT0, cert);
+ CertificateEventInfo certEventInfo = (CertificateEventInfo) messageCaptor.getValue().obj;
+ assertEquals(FakeKeys.CA_CERT0, certEventInfo.getCert());
+ assertEquals("1234", certEventInfo.getCertHash());
}
/**
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
index 595faaf921..6056dc2df7 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
@@ -5056,11 +5056,6 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest {
homeSp.setFqdn(fqdn);
homeSp.setFriendlyName(friendlyName);
config.setHomeSp(homeSp);
- Map<String, String> friendlyNames = new HashMap<>();
- friendlyNames.put("en", friendlyName);
- friendlyNames.put("kr", friendlyName + 1);
- friendlyNames.put("jp", friendlyName + 2);
- config.setServiceFriendlyNames(friendlyNames);
Credential credential = new Credential();
credential.setRealm(TEST_REALM);
credential.setCaCertificate(FakeKeys.CA_CERT0);
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiPseudonymManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiPseudonymManagerTest.java
index b268ad0024..e3fe64ac8c 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiPseudonymManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiPseudonymManagerTest.java
@@ -53,7 +53,7 @@ import java.util.Optional;
* Unit tests for {@link WifiPseudonymManager}.
*/
@SmallTest
-public class WifiPseudonymManagerTest {
+public class WifiPseudonymManagerTest extends WifiBaseTest {
private static final int CARRIER_ID = 1;
private static final int WRONG_CARRIER_ID = 99;
private static final String PSEUDONYM = "pseudonym";
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiThreadRunnerTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiThreadRunnerTest.java
index 59f2ed817b..4a041bcefd 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiThreadRunnerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiThreadRunnerTest.java
@@ -40,7 +40,7 @@ import org.mockito.Spy;
import java.util.function.Supplier;
@SmallTest
-public class WifiThreadRunnerTest {
+public class WifiThreadRunnerTest extends WifiBaseTest {
private static final int RESULT = 2;
private static final int VALUE_ON_TIMEOUT = -1;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/entitlement/CarrierSpecificServiceEntitlementTest.java b/service/tests/wifitests/src/com/android/server/wifi/entitlement/CarrierSpecificServiceEntitlementTest.java
index 8647a35043..c2b537e503 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/entitlement/CarrierSpecificServiceEntitlementTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/entitlement/CarrierSpecificServiceEntitlementTest.java
@@ -35,6 +35,7 @@ import androidx.test.filters.SmallTest;
import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.libraries.entitlement.EapAkaHelper;
import com.android.libraries.entitlement.ServiceEntitlementException;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.entitlement.http.HttpClient;
import com.android.server.wifi.entitlement.http.HttpRequest;
import com.android.server.wifi.entitlement.http.HttpResponse;
@@ -60,7 +61,7 @@ import java.net.MalformedURLException;
* Unit tests for {@link CarrierSpecificServiceEntitlement}.
*/
@SmallTest
-public class CarrierSpecificServiceEntitlementTest {
+public class CarrierSpecificServiceEntitlementTest extends WifiBaseTest {
private static final String JSON_KEY_MESSAGE_ID = "message-id";
private static final String JSON_KEY_RESPONSE_CODE = "response-code";
private static final String JSON_KEY_EAP_AKA_CHALLENGE = "aka-challenge";
diff --git a/service/tests/wifitests/src/com/android/server/wifi/entitlement/http/HttpClientTest.java b/service/tests/wifitests/src/com/android/server/wifi/entitlement/http/HttpClientTest.java
index d30d7f327f..4c5fb6a622 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/entitlement/http/HttpClientTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/entitlement/http/HttpClientTest.java
@@ -32,6 +32,7 @@ import android.net.Network;
import androidx.test.filters.SmallTest;
import com.android.libraries.entitlement.ServiceEntitlementException;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.entitlement.http.FakeURLStreamHandler.FakeHttpsURLConnection;
import com.android.server.wifi.entitlement.http.FakeURLStreamHandler.FakeResponse;
import com.android.server.wifi.entitlement.http.HttpConstants.ContentType;
@@ -57,7 +58,7 @@ import java.util.Map;
* Unit tests for {@link HttpClient}.
*/
@SmallTest
-public class HttpClientTest {
+public class HttpClientTest extends WifiBaseTest {
private static final String TEST_URL = "https://test.url";
private static final String TEST_RESPONSE_BODY = "TEST_RESPONSE_BODY";
private static final String CONTENT_TYPE_STRING_JSON = "application/json";
diff --git a/service/tests/wifitests/src/com/android/server/wifi/entitlement/http/StreamUtilsTest.java b/service/tests/wifitests/src/com/android/server/wifi/entitlement/http/StreamUtilsTest.java
index 969c6c9ed7..ae6a817ba0 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/entitlement/http/StreamUtilsTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/entitlement/http/StreamUtilsTest.java
@@ -27,6 +27,8 @@ import static java.nio.charset.StandardCharsets.UTF_8;
import androidx.test.filters.SmallTest;
+import com.android.server.wifi.WifiBaseTest;
+
import org.junit.Test;
import java.io.ByteArrayInputStream;
@@ -37,7 +39,7 @@ import java.io.InputStream;
* Unit tests for {@link StreamUtils}.
*/
@SmallTest
-public class StreamUtilsTest {
+public class StreamUtilsTest extends WifiBaseTest {
@Test
public void inputStreamToString() throws Exception {
String expectedString = "expected";
diff --git a/service/tests/wifitests/src/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponseTest.java b/service/tests/wifitests/src/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponseTest.java
index ea9479ee97..843a0b41af 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponseTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/entitlement/response/GetImsiPseudonymResponseTest.java
@@ -34,6 +34,8 @@ import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
+import java.time.Duration;
+
/**
* Unit tests for {@link ChallengeResponse}.
*/
@@ -42,11 +44,12 @@ public class GetImsiPseudonymResponseTest {
private static final String AKA_TOKEN = "aka_token";
private static final String IMSI_PSEUDONYM = "imsi_pseudonym";
private static final int REFRESH_INTERVAL = 48;
+ private static final long DEFAULT_PSEUDONYM_TTL_IN_MILLIS = Duration.ofDays(2).toMillis();
private static final int INVALID_MESSAGE_ID = -1;
private static final String IMSI = "imsi";
@Test
- public void responseBodyCorrect() throws JSONException {
+ public void responseBodyCorrectWithRefreshInterval() throws JSONException {
JSONObject body1 = (new JSONObject()).put(Response.JSON_KEY_MESSAGE_ID,
MESSAGE_ID_3GPP_AUTHENTICATION)
.put(Response.JSON_KEY_RESPONSE_CODE, Response.RESPONSE_CODE_REQUEST_SUCCESSFUL)
@@ -70,6 +73,29 @@ public class GetImsiPseudonymResponseTest {
}
@Test
+ public void responseBodyCorrectWithoutRefreshInterval() throws JSONException {
+ JSONObject body1 = (new JSONObject()).put(Response.JSON_KEY_MESSAGE_ID,
+ MESSAGE_ID_3GPP_AUTHENTICATION)
+ .put(Response.JSON_KEY_RESPONSE_CODE, Response.RESPONSE_CODE_REQUEST_SUCCESSFUL)
+ .put(GetImsiPseudonymResponse.JSON_KEY_AKA_TOKEN, AKA_TOKEN);
+ JSONObject body2 = (new JSONObject()).put(Response.JSON_KEY_MESSAGE_ID,
+ MESSAGE_ID_GET_IMSI_PSEUDONYM)
+ .put(Response.JSON_KEY_RESPONSE_CODE, Response.RESPONSE_CODE_REQUEST_SUCCESSFUL)
+ .put(GetImsiPseudonymResponse.JSON_KEY_IMSI_PSEUDONYM, IMSI_PSEUDONYM);
+ JSONArray bodyArray = (new JSONArray()).put(body1).put(body2);
+
+ GetImsiPseudonymResponse response = new GetImsiPseudonymResponse(bodyArray.toString());
+ assertEquals(Response.RESPONSE_CODE_REQUEST_SUCCESSFUL, response.getAuthResponseCode());
+ assertEquals(AKA_TOKEN, response.getAkaToken());
+ assertEquals(Response.RESPONSE_CODE_REQUEST_SUCCESSFUL,
+ response.getGetImsiPseudonymResponseCode());
+ PseudonymInfo pseudonymInfo = response.toPseudonymInfo(IMSI).get();
+ assertEquals(IMSI_PSEUDONYM, pseudonymInfo.getPseudonym());
+ assertEquals(DEFAULT_PSEUDONYM_TTL_IN_MILLIS, pseudonymInfo.getTtlInMillis());
+ assertEquals(IMSI, pseudonymInfo.getImsi());
+ }
+
+ @Test
public void responseBodyNotJsonArray() {
GetImsiPseudonymResponse response = new GetImsiPseudonymResponse("wrongbody");
assertEquals(0, response.getAuthResponseCode());
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceAidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceAidlImplTest.java
index d5845eeb4c..6617dd7f4c 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceAidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceAidlImplTest.java
@@ -27,12 +27,14 @@ import android.hardware.wifi.WifiStatusCode;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
+import com.android.server.wifi.WifiBaseTest;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiApIfaceAidlImplTest {
+public class WifiApIfaceAidlImplTest extends WifiBaseTest {
private WifiApIfaceAidlImpl mDut;
@Mock private IWifiApIface mIWifiApIfaceMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceHidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceHidlImplTest.java
index d272c3afdb..ef488f8daa 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceHidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceHidlImplTest.java
@@ -33,6 +33,8 @@ import android.hardware.wifi.V1_0.WifiStatusCode;
import android.net.MacAddress;
import android.os.RemoteException;
+import com.android.server.wifi.WifiBaseTest;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -40,7 +42,7 @@ import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
-public class WifiApIfaceHidlImplTest {
+public class WifiApIfaceHidlImplTest extends WifiBaseTest {
private static final String TEST_IFACE_NAME = "wlan1";
private static final MacAddress TEST_MAC_ADDRESS = MacAddress.fromString("ee:33:a2:94:10:92");
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceTest.java
index d4f9c3aec4..c6649377eb 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiApIfaceTest.java
@@ -27,12 +27,14 @@ import static org.mockito.Mockito.when;
import android.net.MacAddress;
+import com.android.server.wifi.WifiBaseTest;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiApIfaceTest {
+public class WifiApIfaceTest extends WifiBaseTest {
// HAL mocks
@Mock android.hardware.wifi.V1_0.IWifiApIface mIWifiApIfaceHidlMock;
@Mock android.hardware.wifi.IWifiApIface mIWifiApIfaceAidlMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipAidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipAidlImplTest.java
index dd21cb23b3..543d2c0e1d 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipAidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipAidlImplTest.java
@@ -44,6 +44,7 @@ import android.os.ServiceSpecificException;
import com.android.server.wifi.SarInfo;
import com.android.server.wifi.SsidTranslator;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.WifiNative;
import com.android.server.wifi.WlanWakeReasonAndCounts;
@@ -56,7 +57,7 @@ import org.mockito.MockitoAnnotations;
import java.util.List;
import java.util.Random;
-public class WifiChipAidlImplTest {
+public class WifiChipAidlImplTest extends WifiBaseTest {
private WifiChipAidlImpl mDut;
@Mock private IWifiChip mIWifiChipMock;
@Mock private Context mContextMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipHidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipHidlImplTest.java
index 16ebdca195..26bcca3b18 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipHidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipHidlImplTest.java
@@ -51,6 +51,7 @@ import android.os.RemoteException;
import com.android.modules.utils.build.SdkLevel;
import com.android.server.wifi.SarInfo;
import com.android.server.wifi.SsidTranslator;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.WifiNative;
import com.android.server.wifi.WlanWakeReasonAndCounts;
import com.android.wifi.resources.R;
@@ -65,7 +66,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
-public class WifiChipHidlImplTest {
+public class WifiChipHidlImplTest extends WifiBaseTest {
private static final String TEST_IFACE_NAME = "wlan0";
private WifiChipHidlImpl mDut;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipTest.java
index 7d9eb3e943..b049fcc96a 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiChipTest.java
@@ -29,13 +29,14 @@ import android.annotation.NonNull;
import android.content.Context;
import com.android.server.wifi.SsidTranslator;
+import com.android.server.wifi.WifiBaseTest;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiChipTest {
+public class WifiChipTest extends WifiBaseTest {
// HAL mocks
@Mock android.hardware.wifi.V1_0.IWifiChip mIWifiChipHidlMock;
@Mock android.hardware.wifi.IWifiChip mIWifiChipAidlMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalAidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalAidlImplTest.java
index c63b6b5fcc..5e1c3395b6 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalAidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalAidlImplTest.java
@@ -35,6 +35,7 @@ import android.os.RemoteException;
import android.os.ServiceSpecificException;
import com.android.server.wifi.SsidTranslator;
+import com.android.server.wifi.WifiBaseTest;
import org.junit.Before;
import org.junit.Test;
@@ -42,7 +43,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiHalAidlImplTest {
+public class WifiHalAidlImplTest extends WifiBaseTest {
private WifiHalAidlImpl mDut;
@Mock private IWifi mIWifiMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalHidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalHidlImplTest.java
index 5bcde770b8..22ef97696f 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalHidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalHidlImplTest.java
@@ -39,6 +39,7 @@ import android.os.IHwBinder;
import android.os.RemoteException;
import com.android.server.wifi.SsidTranslator;
+import com.android.server.wifi.WifiBaseTest;
import org.junit.Before;
import org.junit.Test;
@@ -49,7 +50,7 @@ import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.Arrays;
-public class WifiHalHidlImplTest {
+public class WifiHalHidlImplTest extends WifiBaseTest {
private WifiHalSpy mDut;
private WifiStatus mStatusSuccess;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalTest.java
index 71ef5f3b7f..3c78e33def 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiHalTest.java
@@ -28,13 +28,14 @@ import android.annotation.NonNull;
import android.content.Context;
import com.android.server.wifi.SsidTranslator;
+import com.android.server.wifi.WifiBaseTest;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiHalTest {
+public class WifiHalTest extends WifiBaseTest {
// Framework HIDL/AIDL implementation mocks
@Mock WifiHalHidlImpl mWifiHalHidlImplMock;
@Mock WifiHalAidlImpl mWifiHalAidlImplMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceAidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceAidlImplTest.java
index 04cd45f380..12c3e2a32d 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceAidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceAidlImplTest.java
@@ -43,6 +43,7 @@ import android.net.wifi.aware.WifiAwareDataPathSecurityConfig;
import android.os.RemoteException;
import android.util.Pair;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.aware.Capabilities;
import org.junit.Before;
@@ -53,7 +54,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiNanIfaceAidlImplTest {
+public class WifiNanIfaceAidlImplTest extends WifiBaseTest {
private static final Capabilities TEST_CAPABILITIES = new Capabilities();
private WifiNanIfaceAidlImpl mDut;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceHidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceHidlImplTest.java
index eb6cef9eca..a04a2f96e1 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceHidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceHidlImplTest.java
@@ -48,6 +48,7 @@ import android.net.wifi.aware.WifiAwareDataPathSecurityConfig;
import android.os.RemoteException;
import android.util.Pair;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.aware.Capabilities;
import org.junit.Before;
@@ -60,7 +61,7 @@ import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
-public class WifiNanIfaceHidlImplTest {
+public class WifiNanIfaceHidlImplTest extends WifiBaseTest {
@Mock IWifiNanIface mIWifiNanIface;
@Mock android.hardware.wifi.V1_2.IWifiNanIface mIWifiNanIface12Mock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceTest.java
index 9a315d74ce..0125885c02 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiNanIfaceTest.java
@@ -21,12 +21,14 @@ import static junit.framework.Assert.assertNull;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
+import com.android.server.wifi.WifiBaseTest;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiNanIfaceTest {
+public class WifiNanIfaceTest extends WifiBaseTest {
// HAL mocks
@Mock android.hardware.wifi.V1_0.IWifiNanIface mIWifiNanIfaceHidlMock;
@Mock android.hardware.wifi.IWifiNanIface mIWifiNanIfaceAidlMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiP2pIfaceTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiP2pIfaceTest.java
index 76b7606d88..f5aa0206b5 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiP2pIfaceTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiP2pIfaceTest.java
@@ -21,12 +21,14 @@ import static junit.framework.Assert.assertNull;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
+import com.android.server.wifi.WifiBaseTest;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiP2pIfaceTest {
+public class WifiP2pIfaceTest extends WifiBaseTest {
// HAL mocks
@Mock android.hardware.wifi.V1_0.IWifiP2pIface mIWifiP2pIfaceHidlMock;
@Mock android.hardware.wifi.IWifiP2pIface mIWifiP2pIfaceAidlMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerAidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerAidlImplTest.java
index c12ad39ba5..ef10eff7c0 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerAidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerAidlImplTest.java
@@ -42,6 +42,7 @@ import android.net.wifi.rtt.RangingRequest;
import android.net.wifi.rtt.RangingResult;
import android.net.wifi.rtt.ResponderConfig;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.rtt.RttTestUtils;
import org.hamcrest.core.IsNull;
@@ -56,7 +57,7 @@ import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.List;
-public class WifiRttControllerAidlImplTest {
+public class WifiRttControllerAidlImplTest extends WifiBaseTest {
private WifiRttControllerAidlImpl mDut;
@Mock private IWifiRttController mIWifiRttControllerMock;
@Mock private WifiRttController.RttControllerRangingResultsCallback mRangingResultsCallbackMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerHidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerHidlImplTest.java
index a33b4b072f..632776095b 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerHidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerHidlImplTest.java
@@ -45,6 +45,7 @@ import android.net.wifi.rtt.RangingRequest;
import android.net.wifi.rtt.RangingResult;
import android.net.wifi.rtt.ResponderConfig;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.rtt.RttTestUtils;
import org.hamcrest.core.IsNull;
@@ -59,7 +60,7 @@ import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.List;
-public class WifiRttControllerHidlImplTest {
+public class WifiRttControllerHidlImplTest extends WifiBaseTest {
private WifiRttController mDut;
private WifiStatus mStatusSuccess;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerTest.java
index 00f688b302..376803ace7 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiRttControllerTest.java
@@ -22,12 +22,14 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
+import com.android.server.wifi.WifiBaseTest;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiRttControllerTest {
+public class WifiRttControllerTest extends WifiBaseTest {
// HAL mocks
@Mock android.hardware.wifi.V1_0.IWifiRttController mIWifiRttControllerHidlMock;
@Mock android.hardware.wifi.IWifiRttController mIWifiRttControllerAidlMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceAidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceAidlImplTest.java
index 6b4c689620..0ed10caca4 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceAidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceAidlImplTest.java
@@ -46,6 +46,7 @@ import android.hardware.wifi.WifiRateInfo;
import android.net.wifi.WifiManager;
import com.android.server.wifi.SsidTranslator;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.WifiLinkLayerStats;
import com.android.server.wifi.WifiLoggerHal;
import com.android.server.wifi.WifiNative;
@@ -59,7 +60,7 @@ import org.mockito.MockitoAnnotations;
import java.util.List;
import java.util.Random;
-public class WifiStaIfaceAidlImplTest {
+public class WifiStaIfaceAidlImplTest extends WifiBaseTest {
private static final int[] TEST_FREQUENCIES = {2412, 2417, 2422, 2427, 2432, 2437};
private WifiStaIfaceAidlImpl mDut;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceHidlImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceHidlImplTest.java
index efbd05e134..b72bcde42d 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceHidlImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceHidlImplTest.java
@@ -54,6 +54,7 @@ import android.net.wifi.WifiManager;
import android.os.RemoteException;
import com.android.server.wifi.SsidTranslator;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.WifiLinkLayerStats;
import com.android.server.wifi.WifiLoggerHal;
import com.android.server.wifi.WifiNative;
@@ -71,7 +72,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Random;
-public class WifiStaIfaceHidlImplTest {
+public class WifiStaIfaceHidlImplTest extends WifiBaseTest {
private static final int[] TEST_FREQUENCIES = {2412, 2417, 2422, 2427, 2432, 2437};
private static final MacAddress TEST_MAC_ADDRESS = MacAddress.fromString("ee:33:a2:94:10:92");
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceTest.java b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceTest.java
index 8e83433a01..f432f2f92f 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hal/WifiStaIfaceTest.java
@@ -25,13 +25,14 @@ import android.annotation.NonNull;
import android.content.Context;
import com.android.server.wifi.SsidTranslator;
+import com.android.server.wifi.WifiBaseTest;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-public class WifiStaIfaceTest {
+public class WifiStaIfaceTest extends WifiBaseTest {
// HAL mocks
@Mock android.hardware.wifi.V1_0.IWifiStaIface mIWifiStaIfaceHidlMock;
@Mock android.hardware.wifi.IWifiStaIface mIWifiStaIfaceAidlMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
index 4d75e52517..ca59e17498 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java
@@ -51,6 +51,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
+import android.app.ActivityManager;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
@@ -223,6 +224,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Mock MacAddressUtil mMacAddressUtil;
@Mock WifiPermissionsUtil mWifiPermissionsUtil;
@Mock DeviceConfigFacade mDeviceConfigFacade;
+ @Mock ActivityManager mActivityManager;
RunnerHandler mHandler;
TestLooper mLooper;
@@ -262,6 +264,7 @@ public class PasspointManagerTest extends WifiBaseTest {
any(PasspointManager.class), any(WifiMetrics.class)))
.thenReturn(mPasspointProvisioner);
when(mContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager);
+ when(mContext.getSystemService(ActivityManager.class)).thenReturn(mActivityManager);
when(mWifiInjector.getWifiNetworkSuggestionsManager())
.thenReturn(mWifiNetworkSuggestionsManager);
when(mWifiPermissionsUtil.doesUidBelongToCurrentUserOrDeviceOwner(anyInt()))
@@ -380,11 +383,6 @@ public class PasspointManagerTest extends WifiBaseTest {
homeSp.setFqdn(fqdn);
homeSp.setFriendlyName(friendlyName);
config.setHomeSp(homeSp);
- Map<String, String> friendlyNames = new HashMap<>();
- friendlyNames.put("en", friendlyName);
- friendlyNames.put("kr", friendlyName + 1);
- friendlyNames.put("jp", friendlyName + 2);
- config.setServiceFriendlyNames(friendlyNames);
Credential credential = new Credential();
credential.setRealm(realm != null ? realm : TEST_REALM);
credential.setCaCertificate(FakeKeys.CA_CERT0);
@@ -421,12 +419,14 @@ public class PasspointManagerTest extends WifiBaseTest {
}
private PasspointProvider addTestProvider(String fqdn, String friendlyName,
- String packageName, boolean isSuggestion, String realm) {
+ String packageName, boolean isSuggestion, String realm,
+ boolean addServiceFriendlyNames) {
WifiConfiguration wifiConfig = WifiConfigurationTestUtil.generateWifiConfig(-1, TEST_UID,
"\"PasspointTestSSID\"", true, true,
fqdn, friendlyName, SECURITY_EAP);
- return addTestProvider(fqdn, friendlyName, packageName, wifiConfig, isSuggestion, realm);
+ return addTestProvider(fqdn, friendlyName, packageName, wifiConfig, isSuggestion, realm,
+ addServiceFriendlyNames);
}
/**
@@ -436,10 +436,18 @@ public class PasspointManagerTest extends WifiBaseTest {
* @return {@link PasspointProvider}
*/
private PasspointProvider addTestProvider(String fqdn, String friendlyName,
- String packageName, WifiConfiguration wifiConfig, boolean isSuggestion, String realm) {
+ String packageName, WifiConfiguration wifiConfig, boolean isSuggestion, String realm,
+ boolean addServiceFriendlyNames) {
PasspointConfiguration config =
createTestConfigWithUserCredentialAndRealm(fqdn, friendlyName, realm);
wifiConfig.setPasspointUniqueId(config.getUniqueId());
+ if (addServiceFriendlyNames) {
+ Map<String, String> friendlyNames = new HashMap<>();
+ friendlyNames.put("en", friendlyName);
+ friendlyNames.put("kr", friendlyName + 1);
+ friendlyNames.put("jp", friendlyName + 2);
+ config.setServiceFriendlyNames(friendlyNames);
+ }
PasspointProvider provider = createMockProvider(config, wifiConfig, isSuggestion);
when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore),
eq(mWifiCarrierInfoManager), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE),
@@ -1055,7 +1063,7 @@ public class PasspointManagerTest extends WifiBaseTest {
com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession().mockStatic(
InformationElementUtil.class).startMocking();
try {
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
when(mAnqpCache.getEntry(TEST_ANQP_KEY)).thenReturn(null);
InformationElementUtil.Vsa vsa = new InformationElementUtil.Vsa();
@@ -1084,7 +1092,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void matchProviderAsHomeProvider() throws Exception {
PasspointProvider provider =
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
ANQPData entry = new ANQPData(mClock, null);
when(mAnqpCache.getEntry(TEST_ANQP_KEY)).thenReturn(entry);
@@ -1105,7 +1113,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void matchProviderAsRoamingProvider() throws Exception {
PasspointProvider provider =
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
ANQPData entry = new ANQPData(mClock, null);
when(mAnqpCache.getEntry(TEST_ANQP_KEY)).thenReturn(entry);
@@ -1126,7 +1134,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void matchProviderWithNoMatch() throws Exception {
PasspointProvider provider =
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
ANQPData entry = new ANQPData(mClock, null);
when(mAnqpCache.getEntry(TEST_ANQP_KEY)).thenReturn(entry);
@@ -1185,7 +1193,7 @@ public class PasspointManagerTest extends WifiBaseTest {
InformationElementUtil.class).startMocking();
try {
PasspointProvider provider = addTestProvider(TEST_FQDN + 0, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
when(provider.tryUpdateCarrierId()).thenReturn(true);
reset(mWifiConfigManager);
@@ -1219,15 +1227,15 @@ public class PasspointManagerTest extends WifiBaseTest {
InformationElementUtil.class).startMocking();
try {
PasspointProvider providerHome = addTestProvider(TEST_FQDN + 0, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
providerHome.getWifiConfig().isHomeProviderNetwork = true;
PasspointProvider providerRoaming = addTestProvider(TEST_FQDN + 1, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
WifiConfiguration wifiConfiguration = WifiConfigurationTestUtil.generateWifiConfig(-1,
TEST_UID, "\"PasspointTestSSID\"", true, true,
TEST_FQDN + 2, TEST_FRIENDLY_NAME, SECURITY_EAP);
PasspointProvider providerNone = addTestProvider(TEST_FQDN + 2, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, wifiConfiguration, false, null);
+ TEST_PACKAGE, wifiConfiguration, false, null, false);
ANQPData entry = new ANQPData(mClock, null);
InformationElementUtil.Vsa vsa = new InformationElementUtil.Vsa();
vsa.anqpDomainID = TEST_ANQP_DOMAIN_ID2;
@@ -1276,21 +1284,21 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void getWifiConfigsForPasspointProfiles() {
PasspointProvider provider1 = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
WifiConfiguration config1 = provider1.getWifiConfig();
when(mWifiConfigManager.getConfiguredNetwork(provider1.getConfig().getUniqueId()))
.thenReturn(config1);
PasspointProvider provider2 = addTestProvider(TEST_FQDN + 1, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
PasspointProvider provider3 = addTestProvider(TEST_FQDN + 2, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, true, null);
+ TEST_PACKAGE, true, null, false);
when(mWifiNetworkSuggestionsManager
.isPasspointSuggestionSharedWithUser(provider3.getWifiConfig())).thenReturn(false);
WifiConfiguration config3 = provider3.getWifiConfig();
when(mWifiConfigManager.getConfiguredNetwork(provider3.getConfig().getUniqueId()))
.thenReturn(config3);
PasspointProvider provider4 = addTestProvider(TEST_FQDN + 3, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, true, null);
+ TEST_PACKAGE, true, null, false);
when(mWifiNetworkSuggestionsManager
.isPasspointSuggestionSharedWithUser(provider4.getWifiConfig())).thenReturn(true);
WifiConfiguration config4 = provider4.getWifiConfig();
@@ -1321,7 +1329,7 @@ public class PasspointManagerTest extends WifiBaseTest {
.thenReturn(randomizedMacAddress);
when(mWifiConfigManager.shouldUseNonPersistentRandomization(any())).thenReturn(false);
PasspointProvider provider = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
WifiConfiguration configuration = provider.getWifiConfig();
when(mWifiConfigManager.getConfiguredNetwork(provider.getConfig().getUniqueId()))
.thenReturn(configuration);
@@ -1345,7 +1353,7 @@ public class PasspointManagerTest extends WifiBaseTest {
.thenReturn(randomizedMacAddress);
when(mWifiConfigManager.shouldUseNonPersistentRandomization(any())).thenReturn(true);
PasspointProvider provider = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
WifiConfiguration configuration = provider.getWifiConfig();
when(mWifiConfigManager.getConfiguredNetwork(provider.getConfig().getUniqueId()))
.thenReturn(configuration);
@@ -1361,9 +1369,9 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void testGetWifiConfigsForPasspointProfilesWithSsids() {
PasspointProvider provider1 = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
PasspointProvider provider2 = addTestProvider(TEST_FQDN + 1, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
when(provider2.getMostRecentSsid()).thenReturn(TEST_SSID); // assign a recent SSID
// Only entry should be for the provider that was assigned a recent SSID.
@@ -1567,9 +1575,9 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void getMatchingPasspointConfigsForOsuProvidersWithMatch() {
PasspointProvider provider1 =
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, true);
PasspointProvider provider2 =
- addTestProvider(TEST_FQDN2, TEST_FRIENDLY_NAME2, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN2, TEST_FRIENDLY_NAME2, TEST_PACKAGE, false, null, true);
List<OsuProvider> osuProviders = new ArrayList<>();
Map<String, String> friendlyNames = new HashMap<>();
@@ -1596,8 +1604,8 @@ public class PasspointManagerTest extends WifiBaseTest {
*/
@Test
public void getMatchingPasspointConfigsForOsuProvidersWitNoMatch() {
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
- addTestProvider(TEST_FQDN2, TEST_FRIENDLY_NAME2, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
+ addTestProvider(TEST_FQDN2, TEST_FRIENDLY_NAME2, TEST_PACKAGE, false, null, false);
List<OsuProvider> osuProviders = new ArrayList<>();
@@ -1899,7 +1907,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void providerNetworkConnectedFirstTime() throws Exception {
PasspointProvider provider =
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
when(provider.getHasEverConnected()).thenReturn(false);
mManager.onPasspointNetworkConnected(provider.getConfig().getUniqueId(), TEST_SSID);
verify(provider).setHasEverConnected(eq(true));
@@ -1916,7 +1924,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void providerNetworkConnectedNotFirstTime() throws Exception {
PasspointProvider provider =
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
when(provider.getHasEverConnected()).thenReturn(true);
mManager.onPasspointNetworkConnected(TEST_FQDN, TEST_SSID);
verify(provider, never()).setHasEverConnected(anyBoolean());
@@ -1931,7 +1939,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void updateMetrics() {
PasspointProvider provider =
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
ArgumentCaptor<Map<String, PasspointProvider>> argCaptor = ArgumentCaptor.forClass(
Map.class);
// Provider have not provided a successful network connection.
@@ -1978,7 +1986,7 @@ public class PasspointManagerTest extends WifiBaseTest {
WifiConfiguration currentConfiguration = WifiConfigurationTestUtil.createPasspointNetwork();
currentConfiguration.FQDN = TEST_FQDN;
PasspointProvider passpointProvider =
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
currentConfiguration.setPasspointUniqueId(passpointProvider.getConfig().getUniqueId());
verify(mAppOpsManager).startWatchingMode(eq(OPSTR_CHANGE_WIFI_STATE), eq(TEST_PACKAGE),
mAppOpChangedListenerCaptor.capture());
@@ -2340,17 +2348,17 @@ public class PasspointManagerTest extends WifiBaseTest {
InformationElementUtil.class).startMocking();
try {
PasspointProvider providerHome = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
providerHome.getConfig().setSubscriptionExpirationTimeInMillis(
System.currentTimeMillis() + 100000);
providerHome.getWifiConfig().isHomeProviderNetwork = true;
PasspointProvider providerRoaming = addTestProvider(TEST_FQDN2, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
WifiConfiguration wifiConfiguration = WifiConfigurationTestUtil.generateWifiConfig(-1,
TEST_UID, "\"PasspointTestSSID\"", true, true,
TEST_FQDN + 2, TEST_FRIENDLY_NAME, SECURITY_EAP);
PasspointProvider providerNone = addTestProvider(TEST_FQDN + 2, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, wifiConfiguration, false, null);
+ TEST_PACKAGE, wifiConfiguration, false, null, false);
ANQPData entry = new ANQPData(mClock, null);
InformationElementUtil.Vsa vsa = new InformationElementUtil.Vsa();
vsa.anqpDomainID = TEST_ANQP_DOMAIN_ID;
@@ -2390,17 +2398,17 @@ public class PasspointManagerTest extends WifiBaseTest {
InformationElementUtil.class).startMocking();
try {
PasspointProvider providerHome = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
providerHome.getConfig().setSubscriptionExpirationTimeInMillis(
System.currentTimeMillis() - 10000);
providerHome.getWifiConfig().isHomeProviderNetwork = true;
PasspointProvider providerRoaming = addTestProvider(TEST_FQDN2, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
WifiConfiguration wifiConfiguration = WifiConfigurationTestUtil.generateWifiConfig(-1,
TEST_UID, "\"PasspointTestSSID\"", true, true,
TEST_FQDN + 2, TEST_FRIENDLY_NAME, SECURITY_EAP);
PasspointProvider providerNone = addTestProvider(TEST_FQDN + 2, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, wifiConfiguration, false, null);
+ TEST_PACKAGE, wifiConfiguration, false, null, false);
ANQPData entry = new ANQPData(mClock, null);
InformationElementUtil.Vsa vsa = new InformationElementUtil.Vsa();
vsa.anqpDomainID = TEST_ANQP_DOMAIN_ID;
@@ -2440,19 +2448,19 @@ public class PasspointManagerTest extends WifiBaseTest {
InformationElementUtil.class).startMocking();
try {
PasspointProvider providerHome = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
providerHome.getConfig().setSubscriptionExpirationTimeInMillis(
System.currentTimeMillis() - 10000);
providerHome.getWifiConfig().isHomeProviderNetwork = true;
PasspointProvider providerRoaming = addTestProvider(TEST_FQDN2, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, null);
+ TEST_PACKAGE, false, null, false);
providerRoaming.getConfig().setSubscriptionExpirationTimeInMillis(
System.currentTimeMillis() + 100000);
WifiConfiguration wifiConfiguration = WifiConfigurationTestUtil.generateWifiConfig(-1,
TEST_UID, "\"PasspointTestSSID\"", true, true,
TEST_FQDN + 2, TEST_FRIENDLY_NAME, SECURITY_EAP);
PasspointProvider providerNone = addTestProvider(TEST_FQDN + 2, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, wifiConfiguration, false, null);
+ TEST_PACKAGE, wifiConfiguration, false, null, false);
ANQPData entry = new ANQPData(mClock, null);
InformationElementUtil.Vsa vsa = new InformationElementUtil.Vsa();
vsa.anqpDomainID = TEST_ANQP_DOMAIN_ID;
@@ -2641,11 +2649,11 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void removeAllProvidersWithSameFqdn() {
PasspointProvider provider1 = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, TEST_REALM);
+ TEST_PACKAGE, false, TEST_REALM, false);
PasspointProvider provider2 = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, TEST_REALM2);
+ TEST_PACKAGE, false, TEST_REALM2, false);
PasspointProvider provider3 = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, TEST_REALM3);
+ TEST_PACKAGE, false, TEST_REALM3, false);
List<PasspointProvider> providers = mUserDataSource.getProviders();
assertEquals(3, providers.size());
@@ -2784,7 +2792,7 @@ public class PasspointManagerTest extends WifiBaseTest {
PasspointProvider provider =
addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, wifiConfig, false,
- null);
+ null, false);
WnmData event = WnmData.createDeauthImminentEvent(Utils.parseMac(TEST_BSSID_STRING), "",
true, 30);
@@ -2804,7 +2812,7 @@ public class PasspointManagerTest extends WifiBaseTest {
PasspointProvider provider =
addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, wifiConfig, false,
- null);
+ null, false);
wifiConfig.enterpriseConfig.setAnonymousIdentity(TEST_ANONYMOUS_IDENTITY);
mManager.setAnonymousIdentity(wifiConfig);
@@ -2827,7 +2835,7 @@ public class PasspointManagerTest extends WifiBaseTest {
PasspointProvider provider =
addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, wifiConfig, false,
- null);
+ null, false);
WifiConfiguration wifiConfig2 = WifiConfigurationTestUtil.generateWifiConfig(11, TEST_UID,
"\"PasspointTestSSID\"", true, true, TEST_FQDN2,
@@ -2835,7 +2843,7 @@ public class PasspointManagerTest extends WifiBaseTest {
PasspointProvider provider2 =
addTestProvider(TEST_FQDN2, TEST_FRIENDLY_NAME, TEST_PACKAGE, wifiConfig2, false,
- null);
+ null, false);
WifiConfigManager.OnNetworkUpdateListener listener = mNetworkListenerCaptor.getValue();
reset(mWifiConfigManager);
@@ -3045,7 +3053,7 @@ public class PasspointManagerTest extends WifiBaseTest {
public void testHandleTermsAndConditionsEvent() throws Exception {
WifiConfiguration config = WifiConfigurationTestUtil.createPasspointNetwork();
PasspointProvider passpointProvider = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, config, false, null);
+ TEST_PACKAGE, config, false, null, false);
assertEquals(TEST_TERMS_AND_CONDITIONS_URL, mManager.handleTermsAndConditionsEvent(
WnmData.createTermsAndConditionsAccetanceRequiredEvent(TEST_BSSID,
TEST_TERMS_AND_CONDITIONS_URL), config).toString());
@@ -3086,7 +3094,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void testClearAnqpRequestsAndFlushCache() throws Exception {
PasspointProvider provider = addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME,
- TEST_PACKAGE, false, TEST_REALM);
+ TEST_PACKAGE, false, TEST_REALM, false);
mManager.clearAnqpRequestsAndFlushCache();
verify(mAnqpRequestManager).clear();
@@ -3125,7 +3133,7 @@ public class PasspointManagerTest extends WifiBaseTest {
@Test
public void testPasspointEnableDisable() throws Exception {
PasspointProvider provider =
- addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null);
+ addTestProvider(TEST_FQDN, TEST_FRIENDLY_NAME, TEST_PACKAGE, false, null, false);
ANQPData entry = new ANQPData(mClock, null);
when(provider.match(anyMap(), any(RoamingConsortium.class), any(ScanResult.class)))
diff --git a/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkNominateHelperTest.java b/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkNominateHelperTest.java
index e9eb710a9a..9fb860e7b3 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkNominateHelperTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointNetworkNominateHelperTest.java
@@ -52,6 +52,7 @@ import androidx.test.filters.SmallTest;
import com.android.server.wifi.Clock;
import com.android.server.wifi.NetworkUpdateResult;
import com.android.server.wifi.ScanDetail;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.WifiCarrierInfoManager;
import com.android.server.wifi.WifiConfigManager;
import com.android.server.wifi.WifiConfigurationTestUtil;
@@ -77,7 +78,7 @@ import java.util.Map;
* Unit tests for {@link PasspointNetworkNominateHelper}.
*/
@SmallTest
-public class PasspointNetworkNominateHelperTest {
+public class PasspointNetworkNominateHelperTest extends WifiBaseTest {
// TODO(b/140763176): should extend WifiBaseTest, but if it does then it fails with NPE
private static final int TEST_NETWORK_ID = 1;
private static final int TEST_NETWORK_ID2 = 2;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/p2p/MockWifiP2pMonitor.java b/service/tests/wifitests/src/com/android/server/wifi/p2p/MockWifiP2pMonitor.java
index 6f74c2093d..caad4fa325 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/p2p/MockWifiP2pMonitor.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/p2p/MockWifiP2pMonitor.java
@@ -30,7 +30,7 @@ import java.util.Map;
* WARNING: This does not perfectly mock the behavior of WifiP2pMonitor at the moment
* ex. startMonitoring does nothing and will not send a connection/disconnection event
*/
-public class MockWifiP2pMonitor extends WifiP2pMonitor {
+public class MockWifiP2pMonitor extends WifiP2pMonitor {
private final Map<String, SparseArray<Handler>> mHandlerMap = new HashMap<>();
@Override
diff --git a/service/tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java b/service/tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java
index 830c7ad8b4..84d870a9c4 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/p2p/SupplicantP2pIfaceHalTest.java
@@ -36,6 +36,7 @@ import android.net.wifi.p2p.WifiP2pGroupList;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
+import com.android.server.wifi.WifiBaseTest;
import com.android.server.wifi.WifiGlobals;
import com.android.server.wifi.WifiInjector;
@@ -53,7 +54,7 @@ import java.util.List;
* which service (HIDL or AIDL) is available. Test the initialization logic and
* verify that calls to all public methods are forwarded to the actual implementation.
*/
-public class SupplicantP2pIfaceHalTest {
+public class SupplicantP2pIfaceHalTest extends WifiBaseTest {
private SupplicantP2pIfaceHalSpy mDut;
private @Mock SupplicantP2pIfaceHalHidlImpl mP2pIfaceHalHidlMock;
private @Mock SupplicantP2pIfaceHalAidlImpl mP2pIfaceHalAidlMock;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java b/service/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java
index c491622e75..f4d69dc6cc 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java
@@ -442,6 +442,35 @@ public class InformationElementUtilTest extends WifiBaseTest {
* Expect the function to return a string with the proper security information.
*/
@Test
+ public void buildCapabilities_rsnElementWithWpa3EnterpriseOnlyNetworkNoGroupMgmtCiherSuite() {
+ InformationElement ie = new InformationElement();
+ ie.id = InformationElement.EID_RSN;
+ ie.bytes = new byte[] {
+ // Version
+ (byte) 0x01, (byte) 0x00,
+ // Group cipher suite: TKIP
+ (byte) 0x00, (byte) 0x0F, (byte) 0xAC, (byte) 0x02,
+ // Pairwise cipher count
+ (byte) 0x01, (byte) 0x00,
+ // Pairwise cipher suite: CCMP
+ (byte) 0x00, (byte) 0x0F, (byte) 0xAC, (byte) 0x04,
+ // AKM count
+ (byte) 0x01, (byte) 0x00,
+ // AMK suite: EAP/SHA256
+ (byte) 0x00, (byte) 0x0F, (byte) 0xAC, (byte) 0x05,
+ // RSN capabilities
+ (byte) 0xc0, (byte) 0x00,
+ };
+ verifyCapabilityStringFromIeWithoutOweSupported(ie,
+ "[WPA2-EAP/SHA256-CCMP]"
+ + "[RSN-EAP/SHA256-CCMP][MFPR][MFPC]");
+ }
+
+ /**
+ * Test Capabilities.generateCapabilitiesString() with a RSN IE.
+ * Expect the function to return a string with the proper security information.
+ */
+ @Test
public void buildCapabilities_rsnElementWithWpa3EnterpriseTransitionNetwork() {
InformationElement ie = new InformationElement();
ie.id = InformationElement.EID_RSN;
@@ -475,7 +504,6 @@ public class InformationElementUtilTest extends WifiBaseTest {
/**
* Test Capabilities.generateCapabilitiesString() with a RSN IE.
* Expect the function to return a string with the proper security information.
- * If there is no group management cipher set, ignore the MFPR capability.
*/
@Test
public void buildCapabilities_rsnElementWithoutGroupManagementCipherButSetMfpr() {
@@ -500,7 +528,7 @@ public class InformationElementUtilTest extends WifiBaseTest {
(byte) 0x40, (byte) 0x00,
};
verifyCapabilityStringFromIeWithoutOweSupported(ie,
- "[WPA2-EAP/SHA1-CCMP+TKIP][RSN-EAP/SHA1-CCMP+TKIP]");
+ "[WPA2-EAP/SHA1-CCMP+TKIP][RSN-EAP/SHA1-CCMP+TKIP][MFPR]");
}
/**