Use mainline beta flag for NetworkAgent event queueing

Add `queue_network_agent_events_in_system_server` as a mainline beta
flag. This flag replaces the previous check for
`mQueueNetworkAgentEventsInSystemServer`, allowing the feature to be
controlled and enabled on all Android versions via mainline beta program.

Flag: com.android.tethering.mainline.beta.queue_network_agent_events_in_system_server
Test: atest ConnectivityCoverageTests --update-device \
      --test-filter '.*NetworkAgent.*'
Test: atest ConnectivityCoverageTests --update-device \
      --test-filter '.*Connectivity.*'
Fix: 428098184
Change-Id: I96b0443bd4c55c28d482349738bbdc4798f0c7f9
This commit is contained in:
Junyu Lai 2025-07-24 15:17:50 +08:00
commit c9890408bf
6 changed files with 50 additions and 13 deletions

View file

@ -8,9 +8,16 @@ flag {
bug: "287177081"
}
flag {
name: "queue_network_agent_events_in_system_server"
namespace: "com_android_tethering"
description: "Queue NetworkAgent events in system server"
bug: "428098184"
}
flag {
name: "lnp_developer_opt_in"
namespace: "com_android_tethering"
description: "The flag enables the developer opt-in for LNP."
bug: "421952907"
}
}

View file

@ -166,7 +166,7 @@ import static com.android.server.connectivity.ConnectivityFlags.DELAY_DESTROY_SO
import static com.android.server.connectivity.ConnectivityFlags.INGRESS_TO_VPN_ADDRESS_FILTERING;
import static com.android.server.connectivity.ConnectivityFlags.NAMESPACE_TETHERING_BOOT;
import static com.android.server.connectivity.ConnectivityFlags.QUEUE_CALLBACKS_FOR_FROZEN_APPS;
import static com.android.server.connectivity.ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER;
import static com.android.server.connectivity.ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_AFTER_B;
import static com.android.server.connectivity.ConnectivityFlags.REQUEST_RESTRICTED_WIFI;
import static com.android.server.connectivity.ConnectivityFlags.SATISFIED_BY_LOCAL_NETWORK_METRICS;
import static com.android.server.connectivity.ConnectivityFlags.WIFI_DATA_INACTIVITY_TIMEOUT;
@ -2026,6 +2026,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
return SdkLevel.isAtLeastT() &&
com.android.tethering.mainline.beta.Flags.bluetoothTetheringRandomizedAddress();
}
/**
* Whether queue network agent events in the system server should be enabled.
*/
public boolean shouldQueueNetworkAgentEventsInSystemServer() {
return com.android.tethering.mainline.beta.Flags
.queueNetworkAgentEventsInSystemServer();
}
}
public ConnectivityService(Context context) {
@ -2139,9 +2147,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
mUseDeclaredMethodsForCallbacksEnabled =
mDeps.isFeatureNotChickenedOut(context,
ConnectivityFlags.USE_DECLARED_METHODS_FOR_CALLBACKS);
mQueueNetworkAgentEventsInSystemServer = mDeps.isAtLeastB()
mQueueNetworkAgentEventsInSystemServer = (mDeps.isAtLeastB()
&& mDeps.isFeatureNotChickenedOut(context,
ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER);
ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_AFTER_B))
|| mDeps.shouldQueueNetworkAgentEventsInSystemServer();
mSupportEarlyLinkPropertiesUpdateForVPN = mDeps.isFeatureNotChickenedOut(context,
ConnectivityFlags.EARLY_LINK_PROPERTIES_UPDATE_FOR_VPN);
// registerUidFrozenStateChangedCallback is only available on U+
@ -15721,7 +15730,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
switch (featureFlag) {
case INGRESS_TO_VPN_ADDRESS_FILTERING:
return mIngressToVpnAddressFiltering;
case QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER:
case QUEUE_NETWORK_AGENT_EVENTS_AFTER_B:
case com.android.tethering.mainline.beta.Flags
.FLAG_QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER:
return mQueueNetworkAgentEventsInSystemServer;
case CLOSE_QUIC_CONNECTION:
return mCloseQuicConnection;

View file

@ -62,7 +62,7 @@ public final class ConnectivityFlags {
public static final String QUEUE_CALLBACKS_FOR_FROZEN_APPS =
"queue_callbacks_for_frozen_apps";
public static final String QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER =
public static final String QUEUE_NETWORK_AGENT_EVENTS_AFTER_B =
"queue_network_agent_events_in_system_server";
public static final String CLOSE_QUIC_CONNECTION = "close_quic_connection";

View file

@ -2232,7 +2232,7 @@ public class ConnectivityServiceTest {
case ConnectivityFlags.REQUEST_RESTRICTED_WIFI:
case ConnectivityFlags.USE_DECLARED_METHODS_FOR_CALLBACKS:
case ConnectivityFlags.QUEUE_CALLBACKS_FOR_FROZEN_APPS:
case ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER:
case ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_AFTER_B:
case ConnectivityFlags.CLOSE_QUIC_CONNECTION:
case ConnectivityFlags.EARLY_LINK_PROPERTIES_UPDATE_FOR_VPN:
case ConnectivityFlags.CONSTRAINED_DATA_SATELLITE_METRICS:
@ -2437,6 +2437,11 @@ public class ConnectivityServiceTest {
public boolean shouldBluetoothTetheringUseRandomAddress() {
return false;
}
@Override
public boolean shouldQueueNetworkAgentEventsInSystemServer() {
return true;
}
}
static class PermissionMonitorDependencies extends PermissionMonitor.Dependencies {

View file

@ -36,7 +36,7 @@ import android.os.Build
import android.os.Process
import android.util.Range
import com.android.server.connectivity.ConnectivityFlags.EARLY_LINK_PROPERTIES_UPDATE_FOR_VPN
import com.android.server.connectivity.ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER
import com.android.server.connectivity.ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_AFTER_B
import com.android.testutils.ConnectivityModuleTest
import com.android.testutils.DevSdkIgnoreRule
import com.android.testutils.DevSdkIgnoreRunner
@ -112,7 +112,9 @@ class CSNetworkAgentTest : CSTest() {
// QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER is disabled. That flag is enabled by default in
// the CSTest.
@ConnectivityModuleTest
@FeatureFlags(flags = [Flag(QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER, false)])
@FeatureFlags(flags = [Flag(QUEUE_NETWORK_AGENT_EVENTS_AFTER_B, false),
Flag(com.android.tethering.mainline.beta.Flags
.FLAG_QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER, false)])
@Test
fun testEarlyLinkPropertiesUpdateForVPN() =
testEarlyLinkPropertiesUpdate(TRANSPORT_VPN, expectEarlyLinkPropertiesUpdate = true)
@ -121,7 +123,9 @@ class CSNetworkAgentTest : CSTest() {
// QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER is disabled. That flag is enabled by default in
// the CSTest.
@ConnectivityModuleTest
@FeatureFlags(flags = [Flag(QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER, false)])
@FeatureFlags(flags = [Flag(QUEUE_NETWORK_AGENT_EVENTS_AFTER_B, false),
Flag(com.android.tethering.mainline.beta.Flags
.FLAG_QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER, false)])
@Test
fun testEarlyLinkPropertiesUpdateForNonVPN() =
testEarlyLinkPropertiesUpdate(TRANSPORT_WIFI, expectEarlyLinkPropertiesUpdate = false)
@ -131,8 +135,10 @@ class CSNetworkAgentTest : CSTest() {
// disabled. These flags are enabled by default in the CSTest.
@ConnectivityModuleTest
@FeatureFlags(
flags = [Flag(QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER, false),
Flag(EARLY_LINK_PROPERTIES_UPDATE_FOR_VPN, false)]
flags = [Flag(QUEUE_NETWORK_AGENT_EVENTS_AFTER_B, false),
Flag(EARLY_LINK_PROPERTIES_UPDATE_FOR_VPN, false),
Flag(com.android.tethering.mainline.beta.Flags
.FLAG_QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER, false)]
)
@Test
fun testEarlyLinkPropertiesUpdateDisabledForVPN() =

View file

@ -184,7 +184,9 @@ open class CSTest {
it[ConnectivityFlags.DELAY_DESTROY_SOCKETS] = true
it[ConnectivityFlags.USE_DECLARED_METHODS_FOR_CALLBACKS] = true
it[ConnectivityFlags.QUEUE_CALLBACKS_FOR_FROZEN_APPS] = true
it[ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER] = true
it[ConnectivityFlags.QUEUE_NETWORK_AGENT_EVENTS_AFTER_B] = true
it[com.android.tethering.mainline.beta.Flags
.FLAG_QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER] = true
it[ConnectivityFlags.CLOSE_QUIC_CONNECTION] = true
it[ConnectivityFlags.EARLY_LINK_PROPERTIES_UPDATE_FOR_VPN] = true
it[ConnectivityFlags.CONSTRAINED_DATA_SATELLITE_METRICS] = true
@ -540,6 +542,12 @@ open class CSTest {
}
override fun shouldBluetoothTetheringUseRandomAddress() = false
override fun shouldQueueNetworkAgentEventsInSystemServer() =
enabledFeatures[com.android.tethering.mainline.beta.Flags
.FLAG_QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER]
?: fail("Unmocked FLAG_QUEUE_NETWORK_AGENT_EVENTS_IN_SYSTEM_SERVER," +
" see CSTest.enabledFeatures")
}
inner class PermDeps : PermissionMonitor.Dependencies() {