diff --git a/common/mainline_beta.aconfig b/common/mainline_beta.aconfig index 4a8a7df311..d88a373ccb 100644 --- a/common/mainline_beta.aconfig +++ b/common/mainline_beta.aconfig @@ -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" -} \ No newline at end of file +} diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index ed74289c61..54ffc2cd8c 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -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; diff --git a/service/src/com/android/server/connectivity/ConnectivityFlags.java b/service/src/com/android/server/connectivity/ConnectivityFlags.java index 19ea0cc2ee..d26559783b 100644 --- a/service/src/com/android/server/connectivity/ConnectivityFlags.java +++ b/service/src/com/android/server/connectivity/ConnectivityFlags.java @@ -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"; diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java index 23c6ecfe87..2f7eb197bc 100644 --- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java @@ -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 { diff --git a/tests/unit/java/com/android/server/connectivityservice/CSNetworkAgentTest.kt b/tests/unit/java/com/android/server/connectivityservice/CSNetworkAgentTest.kt index c07d0e2bc2..d94987435b 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSNetworkAgentTest.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSNetworkAgentTest.kt @@ -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() = diff --git a/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt b/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt index 5cb2442c54..51f100025e 100644 --- a/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt +++ b/tests/unit/java/com/android/server/connectivityservice/base/CSTest.kt @@ -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() {