Enhance global settings for carrier-specific "avoid bad WiFi" behavior

Previously, the "avoid bad WiFi" global setting was limited to a single boolean value (0 or 1),
preventing granular control for multiple carriers.
This commit introduces support for carrier-aware "avoid bad WiFi" configurations using a new,
extensible format: "subId1,value1;subId2,value2;...".
This allows different `subId`s (carriers) to have their own specific "avoid bad WiFi" settings.

Flag: EXEMPT mainline
Bug: 410976315
Test: atest ConnectivityCoverageTests:android.net.connectivity.com.android.server.connectivity.MultinetworkPolicyTrackerTest
Change-Id: I118cff67c0c632778f73649999ee63e6f0e6fb17
This commit is contained in:
Jimi Chen 2025-06-04 09:50:03 +00:00
commit cbdfd9f54b

View file

@ -23,6 +23,7 @@ import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_HANDOVER
import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_PERFORMANCE
import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_RELIABILITY
import android.net.ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI
import android.net.ConnectivitySettingsManager.NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI
import android.net.ConnectivitySettingsManager.NETWORK_METERED_MULTIPATH_PREFERENCE
import android.net.platform.flags.Flags.FLAG_AVOID_BAD_WIFI_FROM_CARRIER_CONFIG
import android.os.Build
@ -310,8 +311,8 @@ class MultinetworkPolicyTrackerTest(private val supportCarrierConfigManager: Boo
@DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.BAKLAVA)
fun testAvoidBadWifiWithGlobalSetting() {
val activeSubId = 1000
// Mock the initial global setting to false
Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "0")
// Mock the initial NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI setting to false
Settings.Global.putString(resolver, NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI, "$activeSubId,0")
// Mock the initial carrier configuration to return true
trackerDependencies.setAvoidBadWifiCarrierConfigForSubId(activeSubId, true)
@ -330,12 +331,51 @@ class MultinetworkPolicyTrackerTest(private val supportCarrierConfigManager: Boo
assertFalse(tracker.avoidBadWifi)
assertTrue(tracker.activelyPreferBadWifi)
// Mock the initial global setting to true
Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "1")
// Mock the NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI setting to true
Settings.Global.putString(resolver, NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI, "$activeSubId,1")
// Mock the initial carrier configuration to return false
trackerDependencies.setAvoidBadWifiCarrierConfigForSubId(activeSubId, false)
// Assert that the tracker's avoidBadWifi flag is true based on global setting
// Assert that the tracker's avoidBadWifi flag is true based on carrier aware setting
assertTrue(tracker.updateAvoidBadWifi())
assertTrue(tracker.avoidBadWifi)
assertTrue(tracker.activelyPreferBadWifi)
val testSubId = 1001
// Mock the NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI setting to multiple carrier setting
Settings.Global.putString(
resolver,
NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI,
"$activeSubId, 0;$testSubId, 1"
)
// Assert that the tracker's avoidBadWifi flag is false based on carrier aware setting
assertTrue(tracker.updateAvoidBadWifi())
assertFalse(tracker.avoidBadWifi)
assertTrue(tracker.activelyPreferBadWifi)
// Simulate a change in the active data subscription ID to testSubId.
listener.onActiveDataSubscriptionIdChanged(testSubId)
// Assert that the tracker's avoidBadWifi flag is true based on carrier aware setting
assertTrue(tracker.avoidBadWifi)
assertTrue(tracker.activelyPreferBadWifi)
// Unset NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI setting,
// it check NETWORK_AVOID_BAD_WIFI setting for backward compatible
Settings.Global.putString(resolver, NETWORK_CARRIER_AWARE_AVOID_BAD_WIFI, null)
// Mock the NETWORK_AVOID_BAD_WIFI setting to setting
Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "0")
// Assert that the tracker's avoidBadWifi flag is true based on setting
assertTrue(tracker.updateAvoidBadWifi())
assertFalse(tracker.avoidBadWifi)
assertTrue(tracker.activelyPreferBadWifi)
// Mock the NETWORK_AVOID_BAD_WIFI setting to setting
Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "1")
// Assert that the tracker's avoidBadWifi flag is true based on setting
assertTrue(tracker.updateAvoidBadWifi())
assertTrue(tracker.avoidBadWifi)
assertTrue(tracker.activelyPreferBadWifi)