Enable per-subId 'avoid bad Wi-Fi' setting storage

Breaks out the `network_carrier_aware_avoid_bad_wifi` setting from a single
string key into individual `Global.Settings` entries per subscription ID.

Flag: EXEMPT mainline
Bug: 424330991
Test: atest ConnectivityCoverageTests:android.net.connectivity.android.net.ConnectivitySettingsManagerTest
Change-Id: Ida673c1b8b915719b8e64ea85a66c2b98862e5f5
This commit is contained in:
Jimi Chen 2025-06-13 13:51:56 +00:00
commit 1bfe086299
3 changed files with 107 additions and 196 deletions

View file

@ -22,11 +22,9 @@ import static android.net.ConnectivityManager.MULTIPATH_PREFERENCE_RELIABILITY;
import static com.android.net.module.util.ConnectivitySettingsUtils.getNetworkLegacyGlobalAvoidBadWifiSetting;
import static com.android.net.module.util.ConnectivitySettingsUtils.getNetworkAvoidBadWifiSetting;
import static com.android.net.module.util.ConnectivitySettingsUtils.convertCarrierAwareSettingsStringToMap;
import static com.android.net.module.util.ConnectivitySettingsUtils.getPrivateDnsModeAsString;
import static com.android.net.module.util.ConnectivitySettingsUtils.setNetworkLegacyGlobalAvoidBadWifiSetting;
import static com.android.net.module.util.ConnectivitySettingsUtils.setNetworkAvoidBadWifiSetting;
import static com.android.net.module.util.ConnectivitySettingsUtils.convertCarrierAwareSettingsMapToString;
import android.annotation.FlaggedApi;
import android.annotation.IntDef;
@ -57,7 +55,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringJoiner;
@ -384,6 +381,9 @@ public class ConnectivitySettingsManager {
public static final String NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI =
"network_carrier_aware_avoid_bad_wifi";
private static final boolean DEFAULT_AVOID_BAD_WIFI = true;
private static final boolean DEFAULT_SHOULD_SHOW_AVOID_BAD_WIFI = false;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(value = {
@ -1043,35 +1043,21 @@ public class ConnectivitySettingsManager {
@FlaggedApi(Flags.FLAG_CARRIER_AWARE_AVOID_BAD_WIFI)
public static void setNetworkAvoidBadWifi(@NonNull Context context, int subId,
@NetworkAvoidBadWifi int value) {
final String setting = getNetworkAvoidBadWifiSetting(context);
final Map<Integer, Boolean> settingMap =
convertCarrierAwareSettingsStringToMap(setting);
final String config;
if (value == NETWORK_AVOID_BAD_WIFI_IGNORE) {
settingMap.put(subId, false);
config = "0";
} else if (value == NETWORK_AVOID_BAD_WIFI_AVOID) {
settingMap.put(subId, true);
config = "1";
} else if (value == NETWORK_AVOID_BAD_WIFI_PROMPT) {
settingMap.remove(subId);
config = null;
} else {
throw new IllegalArgumentException("Invalid avoid bad wifi setting");
}
if (settingMap.isEmpty()) {
setNetworkAvoidBadWifiSetting(context, null);
} else {
setNetworkAvoidBadWifiSetting(
context,
convertCarrierAwareSettingsMapToString(context, settingMap)
);
}
// for backward compatibility, write to the old avoid bad wifi settings as well.
if (settingMap.containsKey(subId)) {
setNetworkLegacyGlobalAvoidBadWifiSetting(context, settingMap.get(subId) ? "1" : "0");
} else {
setNetworkLegacyGlobalAvoidBadWifiSetting(context, null);
}
setNetworkAvoidBadWifiSetting(context, subId, config);
setNetworkLegacyGlobalAvoidBadWifiSetting(context, config);
}
/**
@ -1084,36 +1070,25 @@ public class ConnectivitySettingsManager {
*/
@FlaggedApi(Flags.FLAG_CARRIER_AWARE_AVOID_BAD_WIFI)
public static boolean getNetworkAvoidBadWifi(@NonNull Context context, int subId) {
final String setting =
getNetworkAvoidBadWifiSetting(context);
final boolean defaultConfig = true;
final String setting = getNetworkAvoidBadWifiSetting(context, subId);
// check new avoid bad wifi setting first if it's set
if (setting != null) {
final Map<Integer, Boolean> settingMap =
convertCarrierAwareSettingsStringToMap(setting);
if (settingMap.containsKey(subId)) {
return settingMap.get(subId);
}
}
if (setting != null) return !setting.equals("0");
// for backward compatibility, read the old avoid bad wifi settings if new key is not set.
final String oldSetting = getNetworkLegacyGlobalAvoidBadWifiSetting(context);
if (oldSetting != null) {
if (oldSetting.equals("1")) {
return true;
} else if (oldSetting.equals("0")) {
return false;
}
}
if (oldSetting != null) return !oldSetting.equals("0");
// read carrier config if both new and old settings is not set.
final CarrierConfigManager ccm = context.getSystemService(CarrierConfigManager.class);
if (ccm == null) return defaultConfig;
if (ccm == null) return DEFAULT_AVOID_BAD_WIFI;
final PersistableBundle config =
getConfigForSubId(ccm, subId, CarrierConfigManager.KEY_AVOID_BAD_WIFI_BOOL);
return config.getBoolean(CarrierConfigManager.KEY_AVOID_BAD_WIFI_BOOL, defaultConfig);
return config.getBoolean(
CarrierConfigManager.KEY_AVOID_BAD_WIFI_BOOL,
DEFAULT_AVOID_BAD_WIFI
);
}
/**
@ -1130,21 +1105,18 @@ public class ConnectivitySettingsManager {
*/
@FlaggedApi(Flags.FLAG_CARRIER_AWARE_AVOID_BAD_WIFI)
public static boolean shouldShowAvoidBadWifiToggle(@NonNull Context context, int subId) {
final String setting =
getNetworkAvoidBadWifiSetting(context);
final CarrierConfigManager ccm = context.getSystemService(CarrierConfigManager.class);
final boolean defaultConfig = true;
final boolean defaultDisplay = false;
final String setting = getNetworkAvoidBadWifiSetting(context, subId);
// check new avoid bad wifi setting first if it's set
if (setting != null) return true;
// for backward compatibility, read the old avoid bad wifi if new setting is not set.
final String oldSetting = getNetworkLegacyGlobalAvoidBadWifiSetting(context);
if (oldSetting != null) return true;
final String legacySetting = getNetworkLegacyGlobalAvoidBadWifiSetting(context);
if (legacySetting != null) return true;
// default to false if system does not support CarrierConfigManager
if (ccm == null) return defaultDisplay;
final CarrierConfigManager ccm = context.getSystemService(CarrierConfigManager.class);
if (ccm == null) return DEFAULT_SHOULD_SHOW_AVOID_BAD_WIFI;
final PersistableBundle config = getConfigForSubId(
ccm,
@ -1153,7 +1125,8 @@ public class ConnectivitySettingsManager {
CarrierConfigManager.KEY_SHOW_AVOID_BAD_WIFI_TOGGLE_BOOL
);
if (!config.getBoolean(CarrierConfigManager.KEY_AVOID_BAD_WIFI_BOOL, defaultConfig)) {
if (!config.getBoolean(
CarrierConfigManager.KEY_AVOID_BAD_WIFI_BOOL, DEFAULT_AVOID_BAD_WIFI)) {
// It should not be possible to force a device to be stuck on bad wifi
// and not give the user an option to change this, so if the device doesn't
// avoid bad wifi, show the toggle even if KEY_SHOW_AVOID_BAD_WIFI_TOGGLE_BOOL
@ -1162,7 +1135,9 @@ public class ConnectivitySettingsManager {
}
return config.getBoolean(
CarrierConfigManager.KEY_SHOW_AVOID_BAD_WIFI_TOGGLE_BOOL, defaultDisplay);
CarrierConfigManager.KEY_SHOW_AVOID_BAD_WIFI_TOGGLE_BOOL,
DEFAULT_SHOULD_SHOW_AVOID_BAD_WIFI
);
}

View file

@ -22,10 +22,6 @@ import android.content.ContentResolver;
import android.content.Context;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import java.util.Map;
/**
* Collection of connectivity settings utilities.
@ -88,6 +84,23 @@ public class ConnectivitySettingsUtils {
}
}
/**
* Generates a unique setting key for the "avoid bad Wi-Fi" feature,
* specific to a given cellular subscription ID.
* This key is typically used to store and retrieve a preference
* that controls how the device manages Wi-Fi connectivity
* in the context of a particular cellular carrier.
*
* @param subId The unique identifier of the cellular subscription.
* @return A {@code String} representing the unique setting key.
* The key is constructed by appending the {@code subId} to a
* base constant string for carrier-aware "avoid bad Wi-Fi" settings,
* separated by a forward slash.
*/
public static String getAvoidBadWifiSettingKey(int subId) {
return NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI + "/" + subId;
}
/**
* Get private DNS mode from settings.
*
@ -172,15 +185,16 @@ public class ConnectivitySettingsUtils {
* Set the carrier-aware avoid bad wifi to {@link Settings}.
*
* @param context The {@link Context} to set the setting.
* @param setting The desired setting string, formatted as "subId1,value1;subId2,value2".
* @param subId The subscription ID
* @param setting The desired setting string.
* subId: The carrier subscription ID (integer).
* value: "0" to not avoid bad Wi-Fi for this subscription, or "1" to avoid.
* {@code null}: Ask the user whether to switch away from bad Wi-Fi.
*/
public static void setNetworkAvoidBadWifiSetting(
@NonNull Context context, @Nullable String setting) {
@NonNull Context context, int subId, @Nullable String setting) {
Settings.Global.putString(
context.getContentResolver(), NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI, setting);
context.getContentResolver(), getAvoidBadWifiSettingKey(subId), setting);
}
/**
@ -188,84 +202,13 @@ public class ConnectivitySettingsUtils {
* @see #convertCarrierAwareSettingsStringToMap(String)
*
* @param context The {@link Context} to set the setting.
* @return The current setting string, formatted as "subId1,value1;subId2,value2",
* or {@code null} if the setting is not set.
* @param subId The subscription ID.
* @return The current setting string, formatted as
* "network_carrier_aware_avoid_bad_wifi/{subId}" or {@code null} if the setting is not set.
*/
@Nullable
public static String getNetworkAvoidBadWifiSetting(@NonNull Context context) {
public static String getNetworkAvoidBadWifiSetting(@NonNull Context context, int subId) {
return Settings.Global.getString(
context.getContentResolver(), NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI);
}
/**
* Parses the carrier-aware Wi-Fi avoid bad wifi setting string into a map.
*
* @param setting The setting string, typically retrieved from
* {@link #getNetworkAvoidBadWifiSetting(Context)}.
* Expected format is "subId1,value1;subId2,value2".
* @return A {@link Map} where keys are carrier subscription IDs ({@link Integer})
* and values are booleans indicating whether to avoid bad Wi-Fi ({@code true} for avoid,
* {@code false} for not avoid).
* Returns an empty map if the input setting is null or invalid.
*/
@NonNull
public static Map<Integer, Boolean> convertCarrierAwareSettingsStringToMap(
@Nullable String setting) {
final ArrayMap<Integer, Boolean> settingMap = new ArrayMap<>();
if (setting == null) {
return settingMap;
}
for (String entry: setting.split(";")) {
final String[] parts = entry.split(",");
if (parts.length != 2) {
Log.e(TAG, "invalid setting string: " + entry);
continue;
}
try {
int subId = Integer.parseInt(parts[0].trim());
boolean value = Integer.parseInt(parts[1].trim()) != 0;
settingMap.put(subId, value);
} catch (NumberFormatException e) {
Log.e(TAG, "invalid setting string " + entry);
}
}
return settingMap;
}
/**
* Converts a map of carrier subscription IDs to Wi-Fi avoidance preferences into a string.
*
* @param context The application context.
* @param settingMap A {@link Map} where keys are carrier subscription IDs ({@link Integer})
* and values are booleans indicating whether to avoid bad Wi-Fi ({@code true} for avoid,
* {@code false} for not avoid).
* This map will be converted into a "subId,value;subId2,value2" string format.
* @return A string representing the carrier-aware Wi-Fi avoidance settings,
* or {@code null} if the provided {@code settingMap} is empty.
* The format is "subId1,value1;subId2,value2".
*/
@Nullable
public static String convertCarrierAwareSettingsMapToString(
@NonNull Context context, @NonNull Map<Integer, Boolean> settingMap) {
if (settingMap.isEmpty()) return null;
final StringBuilder sb = new StringBuilder();
int index = 0;
for (Map.Entry<Integer, Boolean> entry: settingMap.entrySet()) {
final String valueStr = entry.getValue() ? "1" : "0";
sb.append(entry.getKey())
.append(",")
.append(valueStr);
if (index < settingMap.size() - 1) {
sb.append(";");
}
index++;
}
return sb.toString();
context.getContentResolver(), getAvoidBadWifiSettingKey(subId));
}
}

View file

@ -74,7 +74,7 @@ import android.telephony.SubscriptionManager
import android.util.Range
import androidx.test.InstrumentationRegistry
import androidx.test.filters.SmallTest
import com.android.net.module.util.ConnectivitySettingsUtils.convertCarrierAwareSettingsStringToMap
import com.android.net.module.util.ConnectivitySettingsUtils.getAvoidBadWifiSettingKey
import com.android.net.module.util.ConnectivitySettingsUtils.getNetworkAvoidBadWifiSetting
import com.android.net.module.util.ConnectivitySettingsUtils.getNetworkLegacyGlobalAvoidBadWifiSetting
import com.android.net.module.util.ConnectivitySettingsUtils.getPrivateDnsModeAsString
@ -135,16 +135,10 @@ class ConnectivitySettingsManagerTest {
}
}
private fun assertAvoidBadWifiSettingEquals(expected: String?, setting: String?) {
// The conversion is necessary because the strings may not be in the same order.
assertEquals(
convertCarrierAwareSettingsStringToMap(
expected
),
convertCarrierAwareSettingsStringToMap(
setting
)
)
private fun assertAvoidBadWifiSettingEquals(expect: Array<Pair<Int, String?>>) {
for ((subId, value) in expect) {
assertEquals(value, getNetworkAvoidBadWifiSetting(context, subId))
}
}
fun <T> testIntSetting(
@ -418,16 +412,18 @@ class ConnectivitySettingsManagerTest {
@Test
@IgnoreUpTo(Build.VERSION_CODES.BAKLAVA)
fun testSetNetworkAvoidBadWifiWithSettings() {
val orgCarrierAwareSetting = getNetworkAvoidBadWifiSetting(context)
val orgSetting = getNetworkLegacyGlobalAvoidBadWifiSetting(context)
val testSubId = 1000
val orgDefaultSubIdSetting = getNetworkAvoidBadWifiSetting(context, defaultSubId)
val orgTestSubIdSetting = getNetworkAvoidBadWifiSetting(context, testSubId)
val orgLegacySetting = getNetworkLegacyGlobalAvoidBadWifiSetting(context)
try {
// initialize NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI and NETWORK_AVOID_BAD_WIFI to null
setNetworkAvoidBadWifiSetting(context, null)
setNetworkAvoidBadWifiSetting(context, defaultSubId, null)
setNetworkLegacyGlobalAvoidBadWifiSetting(context, null)
val testSubId = 1000
// test with if new key NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI is set.
// format: "subId1,value1;subId2,value2;..."
// format: key: "network_carrier_aware_avoid_bad_wifi/{subId}"
// value: "value"
// and if old key NETWORK_AVOID_BAD_WIFI is set as well.
// format: "value"
setNetworkAvoidBadWifi(
@ -436,8 +432,7 @@ class ConnectivitySettingsManagerTest {
ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI_AVOID
)
assertAvoidBadWifiSettingEquals(
"$defaultSubId,1",
getNetworkAvoidBadWifiSetting(context)
arrayOf(Pair(defaultSubId, "1"))
)
assertEquals(
"1",
@ -450,8 +445,7 @@ class ConnectivitySettingsManagerTest {
ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI_IGNORE
)
assertAvoidBadWifiSettingEquals(
"$defaultSubId,0",
getNetworkAvoidBadWifiSetting(context)
arrayOf(Pair(defaultSubId, "0"))
)
assertEquals(
"0",
@ -464,8 +458,10 @@ class ConnectivitySettingsManagerTest {
ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI_AVOID
)
assertAvoidBadWifiSettingEquals(
"$defaultSubId,0;$testSubId,1",
getNetworkAvoidBadWifiSetting(context)
arrayOf(
Pair(defaultSubId, "0"),
Pair(testSubId, "1")
)
)
assertEquals(
"1",
@ -478,8 +474,10 @@ class ConnectivitySettingsManagerTest {
ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI_IGNORE
)
assertAvoidBadWifiSettingEquals(
"$defaultSubId,0;$testSubId,0",
getNetworkAvoidBadWifiSetting(context)
arrayOf(
Pair(defaultSubId, "0"),
Pair(testSubId, "0")
)
)
assertEquals(
"0",
@ -492,8 +490,10 @@ class ConnectivitySettingsManagerTest {
ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI_PROMPT
)
assertAvoidBadWifiSettingEquals(
"$defaultSubId,0",
getNetworkAvoidBadWifiSetting(context)
arrayOf(
Pair(defaultSubId, "0"),
Pair(testSubId, null)
)
)
assertEquals(
null,
@ -506,8 +506,10 @@ class ConnectivitySettingsManagerTest {
ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI_PROMPT
)
assertAvoidBadWifiSettingEquals(
null,
getNetworkAvoidBadWifiSetting(context)
arrayOf(
Pair(defaultSubId, null),
Pair(testSubId, null)
)
)
assertEquals(
null,
@ -515,9 +517,17 @@ class ConnectivitySettingsManagerTest {
)
} finally {
resetSettings(
names = arrayOf(NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI, NETWORK_AVOID_BAD_WIFI),
names = arrayOf(
getAvoidBadWifiSettingKey(defaultSubId),
getAvoidBadWifiSettingKey(testSubId),
NETWORK_AVOID_BAD_WIFI
),
type = settingsTypeGlobal,
values = arrayOf(orgCarrierAwareSetting, orgSetting)
values = arrayOf(
orgDefaultSubIdSetting,
orgTestSubIdSetting,
orgLegacySetting
)
)
}
}
@ -525,30 +535,13 @@ class ConnectivitySettingsManagerTest {
@Test
@IgnoreUpTo(Build.VERSION_CODES.BAKLAVA)
fun testGetNetworkAvoidBadWifiWithCarrierAwareSettings() {
val original = getNetworkAvoidBadWifiSetting(context)
val original = getNetworkAvoidBadWifiSetting(context, defaultSubId)
try {
setNetworkAvoidBadWifiSetting(context, "$defaultSubId,1")
assertTrue(getNetworkAvoidBadWifi(context, defaultSubId))
setNetworkAvoidBadWifiSetting(context, "$defaultSubId,0")
setNetworkAvoidBadWifiSetting(context, defaultSubId, "0")
assertFalse(getNetworkAvoidBadWifi(context, defaultSubId))
val testSubId = 1000
setNetworkAvoidBadWifiSetting(context, "$defaultSubId,0;$testSubId,1")
assertFalse(getNetworkAvoidBadWifi(context, defaultSubId))
assertTrue(getNetworkAvoidBadWifi(context, testSubId))
setNetworkAvoidBadWifiSetting(context, "$defaultSubId,0;$testSubId,0")
assertFalse(getNetworkAvoidBadWifi(context, defaultSubId))
assertFalse(getNetworkAvoidBadWifi(context, testSubId))
setNetworkAvoidBadWifiSetting(context, "$defaultSubId,1;$testSubId,0")
setNetworkAvoidBadWifiSetting(context, defaultSubId, "1")
assertTrue(getNetworkAvoidBadWifi(context, defaultSubId))
assertFalse(getNetworkAvoidBadWifi(context, testSubId))
setNetworkAvoidBadWifiSetting(context, "$defaultSubId,1;$testSubId,1")
assertTrue(getNetworkAvoidBadWifi(context, defaultSubId))
assertTrue(getNetworkAvoidBadWifi(context, testSubId))
} finally {
resetSettings(
names = arrayOf(NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI),
@ -561,12 +554,12 @@ class ConnectivitySettingsManagerTest {
@Test
@IgnoreUpTo(Build.VERSION_CODES.BAKLAVA)
fun testGetNetworkAvoidBadWifiWithSettings() {
val orgCarrierAwareSetting = getNetworkAvoidBadWifiSetting(context)
val orgCarrierAwareSetting = getNetworkAvoidBadWifiSetting(context, defaultSubId)
val orgSetting = getNetworkLegacyGlobalAvoidBadWifiSetting(context)
try {
// test if NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI is not set,
// then it check NETWORK_AVOID_BAD_WIFI for backward compatibility.
setNetworkAvoidBadWifiSetting(context, null)
setNetworkAvoidBadWifiSetting(context, defaultSubId, null)
val testSubId = 1000
setNetworkLegacyGlobalAvoidBadWifiSetting(context, "0")
@ -588,12 +581,12 @@ class ConnectivitySettingsManagerTest {
@Test
@IgnoreUpTo(Build.VERSION_CODES.BAKLAVA)
fun testGetNetworkAvoidBadWifiWithCarrierConfig() {
val orgCarrierAwareSetting = getNetworkAvoidBadWifiSetting(context)
val orgCarrierAwareSetting = getNetworkAvoidBadWifiSetting(context, defaultSubId)
val orgSetting = getNetworkLegacyGlobalAvoidBadWifiSetting(context)
try {
// unset the global settings, then it depends on the carrier config
mCarrierConfigRule.acquireCarrierPrivilege(defaultSubId)
setNetworkAvoidBadWifiSetting(context, null)
setNetworkAvoidBadWifiSetting(context, defaultSubId, null)
setNetworkLegacyGlobalAvoidBadWifiSetting(context, null)
// default should be true if no carrier config key is set
@ -616,25 +609,25 @@ class ConnectivitySettingsManagerTest {
@Test
@IgnoreUpTo(Build.VERSION_CODES.BAKLAVA)
fun testShouldShowAvoidBadWifiToggleWithSettings() {
val orgCarrierAwareSetting = getNetworkAvoidBadWifiSetting(context)
val orgCarrierAwareSetting = getNetworkAvoidBadWifiSetting(context, defaultSubId)
val orgSetting = getNetworkLegacyGlobalAvoidBadWifiSetting(context)
try {
// unset the NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI, and NETWORK_AVOID_BAD_WIFI,
// it should be false since no carrier config is set
setNetworkAvoidBadWifiSetting(context, null)
setNetworkAvoidBadWifiSetting(context, defaultSubId, null)
setNetworkLegacyGlobalAvoidBadWifiSetting(context, null)
assertFalse(shouldShowAvoidBadWifiToggle(context, defaultSubId))
// if any global settings is set, it should display the toggle.
setNetworkAvoidBadWifiSetting(context, "$defaultSubId,1")
setNetworkAvoidBadWifiSetting(context, defaultSubId, "1")
assertTrue(shouldShowAvoidBadWifiToggle(context, defaultSubId))
setNetworkAvoidBadWifiSetting(context, "$defaultSubId,0")
setNetworkAvoidBadWifiSetting(context, defaultSubId, "0")
assertTrue(shouldShowAvoidBadWifiToggle(context, defaultSubId))
// unset the NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI,
// then it check NETWORK_AVOID_BAD_WIFI for backward compatibility.
setNetworkAvoidBadWifiSetting(context, null)
setNetworkAvoidBadWifiSetting(context, defaultSubId, null)
setNetworkLegacyGlobalAvoidBadWifiSetting(context, "1")
assertTrue(shouldShowAvoidBadWifiToggle(context, defaultSubId))
@ -652,13 +645,13 @@ class ConnectivitySettingsManagerTest {
@Test
@IgnoreUpTo(Build.VERSION_CODES.BAKLAVA)
fun testShouldShowAvoidBadWifiToggleWithCarrierConfig() {
val orgCarrierAwareSetting = getNetworkAvoidBadWifiSetting(context)
val orgCarrierAwareSetting = getNetworkAvoidBadWifiSetting(context, defaultSubId)
val orgSetting = getNetworkLegacyGlobalAvoidBadWifiSetting(context)
try {
// unset both NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI and KEY_AVOID_BAD_WIFI_BOOL settings,
// then it depends on the carrier config
mCarrierConfigRule.acquireCarrierPrivilege(defaultSubId)
setNetworkAvoidBadWifiSetting(context, null)
setNetworkAvoidBadWifiSetting(context, defaultSubId, null)
setNetworkLegacyGlobalAvoidBadWifiSetting(context, null)
// default should be false if KEY_AVOID_BAD_WIFI_BOOL is not set