diff --git a/thread/service/java/com/android/server/thread/ThreadNetworkCountryCode.java b/thread/service/java/com/android/server/thread/ThreadNetworkCountryCode.java index 23aeb93fd184e426d293c824525a949efff01e34..a1484a41d84e34639d6d59f9e88c61b6b577056e 100644 --- a/thread/service/java/com/android/server/thread/ThreadNetworkCountryCode.java +++ b/thread/service/java/com/android/server/thread/ThreadNetworkCountryCode.java @@ -310,7 +310,14 @@ public class ThreadNetworkCountryCode { public void onActiveCountryCodeChanged(String countryCode) { Log.d(TAG, "Wifi country code is changed to " + countryCode); synchronized ("ThreadNetworkCountryCode.this") { - mWifiCountryCodeInfo = new CountryCodeInfo(countryCode, COUNTRY_CODE_SOURCE_WIFI); + if (isValidCountryCode(countryCode)) { + mWifiCountryCodeInfo = + new CountryCodeInfo(countryCode, COUNTRY_CODE_SOURCE_WIFI); + } else { + Log.w(TAG, "WiFi country code " + countryCode + " is invalid"); + mWifiCountryCodeInfo = null; + } + updateCountryCode(false /* forceUpdate */); } } diff --git a/thread/tests/unit/src/com/android/server/thread/ThreadNetworkCountryCodeTest.java b/thread/tests/unit/src/com/android/server/thread/ThreadNetworkCountryCodeTest.java index 670449dfb78c82adb52cf94a169adc32b31e367f..5ca6511bc87eb2cadf56b51b5227e29a410e18ec 100644 --- a/thread/tests/unit/src/com/android/server/thread/ThreadNetworkCountryCodeTest.java +++ b/thread/tests/unit/src/com/android/server/thread/ThreadNetworkCountryCodeTest.java @@ -86,6 +86,7 @@ public class ThreadNetworkCountryCodeTest { private static final String TEST_COUNTRY_CODE_US = "US"; private static final String TEST_COUNTRY_CODE_CN = "CN"; private static final String TEST_COUNTRY_CODE_INVALID = "INVALID"; + private static final String TEST_WIFI_DEFAULT_COUNTRY_CODE = "00"; private static final int TEST_SIM_SLOT_INDEX_0 = 0; private static final int TEST_SIM_SLOT_INDEX_1 = 1; @@ -258,6 +259,21 @@ public class ThreadNetworkCountryCodeTest { assertThat(mThreadNetworkCountryCode.getCountryCode()).isEqualTo(TEST_COUNTRY_CODE_US); } + @Test + public void wifiCountryCode_wifiDefaultCountryCodeIsActive_wifiCountryCodeIsNotUsed() { + mThreadNetworkCountryCode.initialize(); + + verify(mWifiManager) + .registerActiveCountryCodeChangedCallback( + any(), mWifiCountryCodeReceiverCaptor.capture()); + mWifiCountryCodeReceiverCaptor + .getValue() + .onActiveCountryCodeChanged(TEST_WIFI_DEFAULT_COUNTRY_CODE); + + assertThat(mThreadNetworkCountryCode.getCountryCode()) + .isNotEqualTo(TEST_WIFI_DEFAULT_COUNTRY_CODE); + } + @Test public void wifiCountryCode_wifiCountryCodeIsInactive_defaultCountryCodeIsUsed() { mThreadNetworkCountryCode.initialize();