diff options
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]"); } /** |