summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yan Yan <evitayan@google.com> 2024-10-25 14:40:14 -0700
committer Yan Yan <evitayan@google.com> 2024-12-10 19:27:09 +0000
commit4aeead4a3e576e5d5acfea46e827476fe9b0fe3b (patch)
tree21d000173456614bd1c4fb81233247daecf6456d
parent1adb0dbc95b74059058a26c01800db9603038409 (diff)
Conditionally remove VCN jars from non-updatable platform
When the build system flag RELEASE_MOVE_VCN_TO_MAINLINE is true, VCN framework and service jars will be built into Tethering module. Otherwise, VCN framework jar will be directly installed on the device and the service jar will be included into the platform services.jar Bug: 375213246 Test: atest CtsVcnTestCases && atest FrameworksVcnTests; verified with the flag on and off Flag: RELEASE_MOVE_VCN_TO_MAINLINE Change-Id: If2651f1ede34220172c419f8bf4afb0fe09c0789
-rw-r--r--packages/Vcn/flags/Android.bp14
-rw-r--r--packages/Vcn/framework-b/Android.bp98
-rw-r--r--packages/Vcn/framework-b/framework-vcn-jarjar-rules-platform.txt2
-rw-r--r--packages/Vcn/framework-b/framework-vcn-jarjar-rules.txt4
-rw-r--r--packages/Vcn/framework-b/src/android/net/ConnectivityFrameworkInitializerBaklava.java24
-rw-r--r--packages/Vcn/service-b/Android.bp57
-rw-r--r--packages/Vcn/service-b/service-vcn-platform-jarjar-rules.txt5
-rw-r--r--packages/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java4
-rw-r--r--packages/Vcn/service-b/src/com/android/server/VcnManagementService.java9
-rw-r--r--packages/Vcn/service-b/src/com/android/server/vcn/TelephonySubscriptionTracker.java4
-rw-r--r--packages/Vcn/service-b/src/com/android/server/vcn/Vcn.java4
-rw-r--r--packages/Vcn/service-b/src/com/android/server/vcn/VcnGatewayConnection.java9
-rw-r--r--packages/Vcn/service-b/src/com/android/server/vcn/VcnNetworkProvider.java4
-rw-r--r--packages/Vcn/service-b/src/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java4
-rw-r--r--packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkMetricMonitor.java4
-rw-r--r--packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkPriorityClassifier.java4
-rw-r--r--packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkController.java4
-rw-r--r--packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkEvaluator.java4
-rw-r--r--services/Android.bp6
-rw-r--r--services/core/Android.bp3
-rw-r--r--services/java/com/android/server/SystemServer.java12
21 files changed, 212 insertions, 67 deletions
diff --git a/packages/Vcn/flags/Android.bp b/packages/Vcn/flags/Android.bp
index 3943c6f7fe24..8d09fdbfa3de 100644
--- a/packages/Vcn/flags/Android.bp
+++ b/packages/Vcn/flags/Android.bp
@@ -29,10 +29,24 @@ aconfig_declarations {
],
}
+// TODO: b/374174952 Remove this library when VCN modularization is done
java_aconfig_library {
name: "android.net.vcn.flags-aconfig-java-export",
aconfig_declarations: "android.net.vcn.flags-aconfig",
mode: "exported",
min_sdk_version: "35",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
+ apex_available: [
+ "//apex_available:platform",
+ ],
+}
+
+java_aconfig_library {
+ name: "android.net.vcn.flags-aconfig-java",
+ aconfig_declarations: "android.net.vcn.flags-aconfig",
+ min_sdk_version: "35",
+ defaults: ["framework-minus-apex-aconfig-java-defaults"],
+ apex_available: [
+ "com.android.tethering",
+ ],
}
diff --git a/packages/Vcn/framework-b/Android.bp b/packages/Vcn/framework-b/Android.bp
index c3121162b7f2..edb22c0e7aa0 100644
--- a/packages/Vcn/framework-b/Android.bp
+++ b/packages/Vcn/framework-b/Android.bp
@@ -32,9 +32,9 @@ filegroup {
}
java_defaults {
- name: "framework-connectivity-b-defaults",
+ name: "framework-connectivity-b-defaults-base",
sdk_version: "module_current",
- min_sdk_version: "35", // TODO: Make it Android 25Q2 when this is included in mainline
+
defaults: ["framework-module-defaults"], // This is a boot jar
srcs: [
@@ -44,14 +44,10 @@ java_defaults {
libs: [
"android.net.ipsec.ike.stubs.module_lib",
- "app-compat-annotations",
"framework-wifi.stubs.module_lib",
"unsupportedappusage",
],
- static_libs: [
- //TODO:375213246 Use a non-exported flag lib when VCN is in mainline
- "android.net.vcn.flags-aconfig-java-export",
- ],
+
aidl: {
include_dirs: [
// For connectivity-framework classes such as Network.aidl, NetworkCapabilities.aidl
@@ -60,16 +56,83 @@ java_defaults {
},
}
+soong_config_module_type {
+ name: "framework_connectivity_b_defaults_soong_config",
+ module_type: "java_defaults",
+ config_namespace: "ANDROID",
+ bool_variables: [
+ "is_vcn_in_mainline",
+ ],
+ properties: [
+ "min_sdk_version",
+ "static_libs",
+ "apex_available",
+ ],
+}
+
+framework_connectivity_b_defaults_soong_config {
+ name: "framework-connectivity-b-defaults",
+ defaults: [
+ "framework-connectivity-b-defaults-base",
+ ],
+ soong_config_variables: {
+ is_vcn_in_mainline: {
+ //TODO: b/380155299 Make it Baklava when aidl tool can understand it
+ min_sdk_version: "current",
+ static_libs: ["android.net.vcn.flags-aconfig-java"],
+ apex_available: ["com.android.tethering"],
+
+ conditions_default: {
+ min_sdk_version: "35",
+ static_libs: ["android.net.vcn.flags-aconfig-java-export"],
+ apex_available: ["//apex_available:platform"],
+ },
+ },
+ },
+}
+
+soong_config_module_type {
+ name: "framework_connectivity_b_java_sdk_library_defaults_soong_config",
+ module_type: "java_defaults",
+ config_namespace: "ANDROID",
+ bool_variables: [
+ "is_vcn_in_mainline",
+ ],
+ properties: [
+ "aconfig_declarations",
+ "jarjar_rules",
+ ],
+}
+
+framework_connectivity_b_java_sdk_library_defaults_soong_config {
+ name: "framework-connectivity-b-java-sdk-library-defaults",
+ soong_config_variables: {
+ is_vcn_in_mainline: {
+ aconfig_declarations: ["android.net.vcn.flags-aconfig-java"],
+
+ // TODO: b/375213246 Use the connectivity jarjar rule generator to create the
+ // jarjar rules. In the end state, use "framework-connectivity-jarjar-rules"
+ // after VCN code is moved to the Connectivity folder
+ jarjar_rules: "framework-vcn-jarjar-rules.txt",
+
+ conditions_default: {
+ aconfig_declarations: ["android.net.vcn.flags-aconfig-java-export"],
+
+ // Use "android.net.connectivity" as prefix would trigger
+ // "Hidden API flags are inconsistent" build error
+ jarjar_rules: "framework-vcn-jarjar-rules-platform.txt",
+ },
+ },
+ },
+}
+
java_sdk_library {
name: "framework-connectivity-b",
defaults: [
"framework-connectivity-b-defaults",
+ "framework-connectivity-b-java-sdk-library-defaults",
],
- //TODO: b/375213246 Use "framework-connectivity-jarjar-rules" when VCN is
- // in mainline
- jarjar_rules: "framework-vcn-jarjar-rules.txt",
-
permitted_packages: [
"android.net",
"android.net.vcn",
@@ -92,11 +155,6 @@ java_sdk_library {
"framework-connectivity-pre-jarjar",
],
- aconfig_declarations: [
- //TODO:375213246 Use a non-exported flag lib when VCN is in mainline
- "android.net.vcn.flags-aconfig-java-export",
- ],
-
impl_library_visibility: [
// Using for test only
"//cts/tests/netlegacy22.api",
@@ -120,17 +178,13 @@ java_sdk_library {
"//packages/modules/Wifi/service/tests/wifitests",
],
- apex_available: [
- // TODO: b/374174952 Remove it when VCN modularization is released
- "//apex_available:platform",
-
- "com.android.tethering",
- ],
+ visibility: ["//packages/modules/Connectivity:__subpackages__"],
}
java_library {
name: "framework-connectivity-b-pre-jarjar",
defaults: ["framework-connectivity-b-defaults"],
+ installable: false,
libs: [
"framework-connectivity-pre-jarjar",
],
diff --git a/packages/Vcn/framework-b/framework-vcn-jarjar-rules-platform.txt b/packages/Vcn/framework-b/framework-vcn-jarjar-rules-platform.txt
new file mode 100644
index 000000000000..757043bdbbc0
--- /dev/null
+++ b/packages/Vcn/framework-b/framework-vcn-jarjar-rules-platform.txt
@@ -0,0 +1,2 @@
+rule android.net.vcn.persistablebundleutils.** android.net.vcn.module.repackaged.persistablebundleutils.@1
+rule android.net.vcn.util.** android.net.vcn.module.repackaged.util.@1 \ No newline at end of file
diff --git a/packages/Vcn/framework-b/framework-vcn-jarjar-rules.txt b/packages/Vcn/framework-b/framework-vcn-jarjar-rules.txt
index 757043bdbbc0..7e27b24f749c 100644
--- a/packages/Vcn/framework-b/framework-vcn-jarjar-rules.txt
+++ b/packages/Vcn/framework-b/framework-vcn-jarjar-rules.txt
@@ -1,2 +1,2 @@
-rule android.net.vcn.persistablebundleutils.** android.net.vcn.module.repackaged.persistablebundleutils.@1
-rule android.net.vcn.util.** android.net.vcn.module.repackaged.util.@1 \ No newline at end of file
+rule android.net.vcn.persistablebundleutils.** android.net.connectivity.android.net.vcn.persistablebundleutils.@1
+rule android.net.vcn.util.** android.net.connectivity.android.net.vcn.util.@1 \ No newline at end of file
diff --git a/packages/Vcn/framework-b/src/android/net/ConnectivityFrameworkInitializerBaklava.java b/packages/Vcn/framework-b/src/android/net/ConnectivityFrameworkInitializerBaklava.java
index 1f0fa92d7976..de22ca684871 100644
--- a/packages/Vcn/framework-b/src/android/net/ConnectivityFrameworkInitializerBaklava.java
+++ b/packages/Vcn/framework-b/src/android/net/ConnectivityFrameworkInitializerBaklava.java
@@ -23,8 +23,6 @@ import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.app.SystemServiceRegistry;
import android.compat.Compatibility;
-import android.compat.annotation.ChangeId;
-import android.compat.annotation.EnabledSince;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.vcn.IVcnManagementService;
@@ -40,17 +38,15 @@ import android.os.SystemProperties;
@FlaggedApi(FLAG_MAINLINE_VCN_MODULE_API)
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public final class ConnectivityFrameworkInitializerBaklava {
- /**
- * Starting with {@link VANILLA_ICE_CREAM}, Telephony feature flags (e.g. {@link
- * PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}) are being checked before returning managers
- * that depend on them. If the feature is missing, {@link Context#getSystemService} will return
- * null.
- *
- * <p>This change is specific to VcnManager.
- */
- @ChangeId
- @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
- private static final long ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN = 330902016;
+
+ // This is a copy of TelephonyFrameworkInitializer.ENABLE_CHECKING_TELEPHONY_FEATURES. This
+ // ChangeId will replace ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN to gate VcnManager
+ // feature flag enforcement.
+ // This replacement is safe because both ChangeIds have been enabled since Android V and serve
+ // the same purpose: enforcing telephony feature flag checks before using telephony-based
+ // features. This also simplifies VCN modularization by avoiding the need to handle different
+ // states, such as: SDK < B vs. SDK >= B; VCN in platform vs. VCN in the apex.
+ private static final long ENABLE_CHECKING_TELEPHONY_FEATURES = 330583731;
/**
* The corresponding vendor API for Android V
@@ -71,7 +67,7 @@ public final class ConnectivityFrameworkInitializerBaklava {
private static String getVcnFeatureDependency() {
// Check SDK version of the client app. Apps targeting pre-V SDK might
// have not checked for existence of these features.
- if (!Compatibility.isChangeEnabled(ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN)) {
+ if (!Compatibility.isChangeEnabled(ENABLE_CHECKING_TELEPHONY_FEATURES)) {
return null;
}
diff --git a/packages/Vcn/service-b/Android.bp b/packages/Vcn/service-b/Android.bp
index c1a1ee7875d0..1370b0678cc5 100644
--- a/packages/Vcn/service-b/Android.bp
+++ b/packages/Vcn/service-b/Android.bp
@@ -32,11 +32,9 @@ filegroup {
visibility: ["//frameworks/base/services/core"],
}
-// Do not static include this lib in VCN because these files exist in
-// both service-connectivity.jar and framework.jar
-// TODO: b/374174952 After VCN moves to Connectivity/ and the modularization is done
-// this lib can be removed and "service-connectivity-b-pre-jarjar" can include
-// "service-connectivity-pre-jarjar"
+// TODO: b/374174952 This library is only used in "service-connectivity-b-platform"
+// After VCN moves to Connectivity/ and the modularization is done, this lib and
+// "service-connectivity-b-platform" can both be removed
java_library {
name: "connectivity-utils-service-vcn-internal",
sdk_version: "module_current",
@@ -48,30 +46,30 @@ java_library {
"framework-annotations-lib",
"unsupportedappusage",
],
- visibility: [
- "//visibility:private",
- ],
- apex_available: [
- // TODO: b/374174952 Remove it when VCN modularization is released
- "//apex_available:platform",
+ visibility: ["//visibility:private"],
+}
- "com.android.tethering",
+filegroup {
+ name: "service-vcn-sources",
+ srcs: ["src/**/*.java"],
+ path: "src",
+ visibility: [
+ "//packages/modules/Connectivity/service-b",
],
}
-java_library {
- name: "service-connectivity-b-pre-jarjar",
- sdk_version: "system_server_current",
- min_sdk_version: "35", // TODO: Make it Android 25Q2 when this is included in mainline
+// This java_defaults will be used for "service-connectivity-b-platform" and
+// "service-connectivity-b-pre-jarjar"
+java_defaults {
+ name: "service-connectivity-b-pre-jarjar-defaults",
defaults: ["framework-system-server-module-defaults"], // This is a system server jar
srcs: [
- "src/**/*.java",
+ ":service-vcn-sources",
],
libs: [
"android.net.ipsec.ike.stubs.module_lib",
- "connectivity-utils-service-vcn-internal",
"framework-annotations-lib",
"framework-connectivity-pre-jarjar",
"framework-connectivity-t-pre-jarjar",
@@ -89,13 +87,30 @@ java_library {
"modules-utils-handlerexecutor",
],
+ defaults_visibility: [
+ "//packages/modules/Connectivity/service-b",
+ ],
+}
+
+// This library is only used to be included into services.jar when the build system
+// flag RELEASE_MOVE_VCN_TO_MAINLINE is disabled. When the flag is enabled, a module
+// version of this library will be included in Tethering module
+java_library {
+ name: "service-connectivity-b-platform",
+ defaults: ["service-connectivity-b-pre-jarjar-defaults"],
+ static_libs: ["connectivity-utils-service-vcn-internal"],
+
+ sdk_version: "system_server_current",
+ min_sdk_version: "35",
+
+ // TODO (b/374174952 ): This file is for jarjaring files in
+ // "connectivity-utils-service-vcn-internal".
+ jarjar_rules: "service-vcn-platform-jarjar-rules.txt",
+
visibility: [
"//frameworks/base/services",
],
apex_available: [
- // TODO: b/374174952 Remove it when VCN modularization is released
"//apex_available:platform",
-
- "com.android.tethering",
],
}
diff --git a/packages/Vcn/service-b/service-vcn-platform-jarjar-rules.txt b/packages/Vcn/service-b/service-vcn-platform-jarjar-rules.txt
new file mode 100644
index 000000000000..36307277b4b9
--- /dev/null
+++ b/packages/Vcn/service-b/service-vcn-platform-jarjar-rules.txt
@@ -0,0 +1,5 @@
+rule android.util.IndentingPrintWriter android.net.vcn.module.repackaged.android.util.IndentingPrintWriter
+rule android.util.LocalLog android.net.vcn.module.repackaged.android.util.LocalLog
+rule com.android.internal.util.IndentingPrintWriter android.net.vcn.module.repackaged.com.android.internal.util.IndentingPrintWriter
+rule com.android.internal.util.MessageUtils android.net.vcn.module.repackaged.com.android.internal.util.MessageUtils
+rule com.android.internal.util.WakeupMessage android.net.vcn.module.repackaged.com.android.internal.util.WakeupMessage \ No newline at end of file
diff --git a/packages/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java b/packages/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java
index 02c8ce4f29e9..81c7edf4adf1 100644
--- a/packages/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java
+++ b/packages/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java
@@ -16,7 +16,9 @@
package com.android.server;
+import android.annotation.TargetApi;
import android.content.Context;
+import android.os.Build;
import android.util.Log;
import com.android.tools.r8.keepanno.annotations.KeepItemKind;
@@ -30,6 +32,8 @@ import com.android.tools.r8.keepanno.annotations.UsedByReflection;
// Without this annotation, this class will be treated as unused class and be removed during build
// time.
@UsedByReflection(kind = KeepItemKind.CLASS_AND_METHODS)
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public final class ConnectivityServiceInitializerB extends SystemService {
private static final String TAG = ConnectivityServiceInitializerB.class.getSimpleName();
private final VcnManagementService mVcnManagementService;
diff --git a/packages/Vcn/service-b/src/com/android/server/VcnManagementService.java b/packages/Vcn/service-b/src/com/android/server/VcnManagementService.java
index 26db6a988e31..c9a99d729e91 100644
--- a/packages/Vcn/service-b/src/com/android/server/VcnManagementService.java
+++ b/packages/Vcn/service-b/src/com/android/server/VcnManagementService.java
@@ -37,6 +37,7 @@ import static java.util.Objects.requireNonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
import android.app.AppOpsManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -164,6 +165,8 @@ import java.util.concurrent.TimeUnit;
* @hide
*/
// TODO(b/180451994): ensure all incoming + outgoing calls have a cleared calling identity
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class VcnManagementService extends IVcnManagementService.Stub {
@NonNull private static final String TAG = VcnManagementService.class.getSimpleName();
@NonNull private static final String CONTEXT_ATTRIBUTION_TAG = "VCN";
@@ -297,8 +300,10 @@ public class VcnManagementService extends IVcnManagementService.Stub {
});
}
- // Package-visibility for SystemServer to create instances.
- static VcnManagementService create(@NonNull Context context) {
+ /** Called by ConnectivityServiceInitializerB to create instances. */
+ // VcnManagementService will be jarjared but ConnectivityServiceInitializerB will not. Thus this
+ // method needs to be public for ConnectivityServiceInitializerB to access
+ public static VcnManagementService create(@NonNull Context context) {
return new VcnManagementService(context, new Dependencies());
}
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/TelephonySubscriptionTracker.java b/packages/Vcn/service-b/src/com/android/server/vcn/TelephonySubscriptionTracker.java
index b448f7595b3b..b04e25dff276 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/TelephonySubscriptionTracker.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/TelephonySubscriptionTracker.java
@@ -22,12 +22,14 @@ import static android.telephony.TelephonyManager.ACTION_MULTI_SIM_CONFIG_CHANGED
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.vcn.VcnManager;
import android.net.vcn.util.PersistableBundleUtils.PersistableBundleWrapper;
+import android.os.Build;
import android.os.Handler;
import android.os.ParcelUuid;
import android.os.PersistableBundle;
@@ -77,6 +79,8 @@ import java.util.Set;
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class TelephonySubscriptionTracker extends BroadcastReceiver {
@NonNull private static final String TAG = TelephonySubscriptionTracker.class.getSimpleName();
private static final boolean LOG_DBG = false; // STOPSHIP if true
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/Vcn.java b/packages/Vcn/service-b/src/com/android/server/vcn/Vcn.java
index 2524d0eedac3..369ef6ae6a3f 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/Vcn.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/Vcn.java
@@ -29,6 +29,7 @@ import static com.android.server.VcnManagementService.VDBG;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.net.NetworkCapabilities;
@@ -39,6 +40,7 @@ import android.net.vcn.VcnConfig;
import android.net.vcn.VcnGatewayConnectionConfig;
import android.net.vcn.VcnManager.VcnErrorCode;
import android.net.vcn.util.LogUtils;
+import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.os.ParcelUuid;
@@ -75,6 +77,8 @@ import java.util.Set;
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class Vcn extends Handler {
private static final String TAG = Vcn.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/VcnGatewayConnection.java b/packages/Vcn/service-b/src/com/android/server/vcn/VcnGatewayConnection.java
index e50fc3a6e8b9..300b80f942ef 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/VcnGatewayConnection.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/VcnGatewayConnection.java
@@ -37,6 +37,8 @@ import static com.android.server.VcnManagementService.VDBG;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityDiagnosticsManager;
import android.net.ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback;
@@ -82,6 +84,7 @@ import android.net.vcn.util.LogUtils;
import android.net.vcn.util.MtuUtils;
import android.net.vcn.util.OneWayBoolean;
import android.net.wifi.WifiInfo;
+import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.os.ParcelUuid;
@@ -171,6 +174,8 @@ import java.util.function.Consumer;
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class VcnGatewayConnection extends StateMachine {
private static final String TAG = VcnGatewayConnection.class.getSimpleName();
@@ -2942,6 +2947,10 @@ public class VcnGatewayConnection extends StateMachine {
*
* <p>Synchronize this action to minimize locking around WakeLock use.
*/
+ // WakelockTimeout suppressed because the time the wake lock is needed for is unknown. The
+ // wakelock is only acquired when a Message is sent to this state machine and will be
+ // released when the message is processed or the state machin quits
+ @SuppressLint("WakelockTimeout")
public synchronized void acquire() {
mImpl.acquire();
}
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/VcnNetworkProvider.java b/packages/Vcn/service-b/src/com/android/server/vcn/VcnNetworkProvider.java
index 4552f509b59a..99c848f53c39 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/VcnNetworkProvider.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/VcnNetworkProvider.java
@@ -25,6 +25,7 @@ import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static com.android.server.VcnManagementService.VDBG;
import android.annotation.NonNull;
+import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
@@ -32,6 +33,7 @@ import android.net.NetworkProvider;
import android.net.NetworkRequest;
import android.net.NetworkScore;
import android.net.vcn.VcnGatewayConnectionConfig;
+import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.util.ArraySet;
@@ -54,6 +56,8 @@ import java.util.concurrent.Executor;
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class VcnNetworkProvider extends NetworkProvider {
private static final String TAG = VcnNetworkProvider.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java
index 72de61363d26..6467af4355f6 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java
@@ -23,6 +23,7 @@ import static com.android.internal.annotations.VisibleForTesting.Visibility;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -31,6 +32,7 @@ import android.net.ConnectivityManager;
import android.net.IpSecTransformState;
import android.net.Network;
import android.net.vcn.VcnManager;
+import android.os.Build;
import android.os.Handler;
import android.os.OutcomeReceiver;
import android.os.PowerManager;
@@ -59,6 +61,8 @@ import java.util.concurrent.TimeUnit;
*
* <p>This class is flag gated by "network_metric_monitor" and "ipsec_tramsform_state"
*/
+// TODO(b/374174952) Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class IpSecPacketLossDetector extends NetworkMetricMonitor {
private static final String TAG = IpSecPacketLossDetector.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkMetricMonitor.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkMetricMonitor.java
index 86cee554be6f..14853440a129 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkMetricMonitor.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkMetricMonitor.java
@@ -22,9 +22,11 @@ import static com.android.server.VcnManagementService.LOCAL_LOG;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.net.IpSecTransform;
import android.net.IpSecTransformState;
import android.net.Network;
+import android.os.Build;
import android.os.OutcomeReceiver;
import android.util.CloseGuard;
import android.util.Slog;
@@ -42,6 +44,8 @@ import java.util.concurrent.Executor;
*
* <p>This class is flag gated by "network_metric_monitor"
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public abstract class NetworkMetricMonitor implements AutoCloseable {
private static final String TAG = NetworkMetricMonitor.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkPriorityClassifier.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkPriorityClassifier.java
index 79c4116d0cd4..705141f3f1b4 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkPriorityClassifier.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/NetworkPriorityClassifier.java
@@ -29,12 +29,14 @@ import static com.android.server.VcnManagementService.LOCAL_LOG;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.net.NetworkCapabilities;
import android.net.TelephonyNetworkSpecifier;
import android.net.vcn.VcnCellUnderlyingNetworkTemplate;
import android.net.vcn.VcnManager;
import android.net.vcn.VcnUnderlyingNetworkTemplate;
import android.net.vcn.VcnWifiUnderlyingNetworkTemplate;
+import android.os.Build;
import android.os.ParcelUuid;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -50,6 +52,8 @@ import java.util.Map;
import java.util.Set;
/** @hide */
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
class NetworkPriorityClassifier {
@NonNull private static final String TAG = NetworkPriorityClassifier.class.getSimpleName();
/**
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkController.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkController.java
index 29a0762f5fe8..bc552e7e6afd 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkController.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkController.java
@@ -28,6 +28,7 @@ import static com.android.server.vcn.routeselection.NetworkPriorityClassifier.ge
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
import android.net.IpSecTransform;
@@ -40,6 +41,7 @@ import android.net.vcn.VcnCellUnderlyingNetworkTemplate;
import android.net.vcn.VcnGatewayConnectionConfig;
import android.net.vcn.VcnUnderlyingNetworkTemplate;
import android.net.vcn.util.LogUtils;
+import android.os.Build;
import android.os.Handler;
import android.os.ParcelUuid;
import android.telephony.TelephonyCallback;
@@ -73,6 +75,8 @@ import java.util.TreeSet;
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class UnderlyingNetworkController {
@NonNull private static final String TAG = UnderlyingNetworkController.class.getSimpleName();
diff --git a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkEvaluator.java b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkEvaluator.java
index 30f4ed1b9f0b..776931bad73b 100644
--- a/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkEvaluator.java
+++ b/packages/Vcn/service-b/src/com/android/server/vcn/routeselection/UnderlyingNetworkEvaluator.java
@@ -22,12 +22,14 @@ import static com.android.server.VcnManagementService.LOCAL_LOG;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TargetApi;
import android.net.IpSecTransform;
import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.vcn.VcnManager;
import android.net.vcn.VcnUnderlyingNetworkTemplate;
+import android.os.Build;
import android.os.Handler;
import android.os.ParcelUuid;
import android.util.IndentingPrintWriter;
@@ -50,6 +52,8 @@ import java.util.concurrent.TimeUnit;
*
* @hide
*/
+// TODO(b/374174952): Replace VANILLA_ICE_CREAM with BAKLAVA after Android B finalization
+@TargetApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
public class UnderlyingNetworkEvaluator {
private static final String TAG = UnderlyingNetworkEvaluator.class.getSimpleName();
diff --git a/services/Android.bp b/services/Android.bp
index d99ed3dbdba8..ebd10cc26d16 100644
--- a/services/Android.bp
+++ b/services/Android.bp
@@ -242,9 +242,11 @@ java_library {
"services.wifi",
"service-blobstore",
"service-jobscheduler",
- "service-connectivity-b-pre-jarjar", // Move it to mainline module
"android.hidl.base-V1.0-java",
- ],
+ ] + select(release_flag("RELEASE_MOVE_VCN_TO_MAINLINE"), {
+ true: [],
+ default: ["service-connectivity-b-platform"],
+ }),
libs: [
"android.hidl.manager-V1.0-java",
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 349f3ee2b9f0..9a5560345a22 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -147,6 +147,9 @@ java_library_static {
// Java/AIDL sources to be moved out to CrashRecovery module
":services-crashrecovery-sources",
+
+ // Indicate whether VCN is in platform or mainline
+ ":vcn-location-sources",
],
libs: [
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 0718f043ae2a..f0440a8defe6 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -277,6 +277,7 @@ import com.android.server.usage.StorageStatsService;
import com.android.server.usage.UsageStatsService;
import com.android.server.usb.UsbService;
import com.android.server.utils.TimingsTraceAndSlog;
+import com.android.server.vcn.VcnLocation;
import com.android.server.vibrator.VibratorManagerService;
import com.android.server.voiceinteraction.VoiceInteractionManagerService;
import com.android.server.vr.VrManagerService;
@@ -2146,10 +2147,13 @@ public final class SystemServer implements Dumpable {
t.traceBegin("StartVcnManagementService");
try {
- // TODO: b/375213246 When VCN is in mainline module, load it from the apex path.
- // Whether VCN will be in apex or in the platform will be gated by a build system
- // flag.
- mSystemServiceManager.startService(CONNECTIVITY_SERVICE_INITIALIZER_B_CLASS);
+ if (VcnLocation.IS_VCN_IN_MAINLINE) {
+ mSystemServiceManager.startServiceFromJar(
+ CONNECTIVITY_SERVICE_INITIALIZER_B_CLASS,
+ CONNECTIVITY_SERVICE_APEX_PATH);
+ } else {
+ mSystemServiceManager.startService(CONNECTIVITY_SERVICE_INITIALIZER_B_CLASS);
+ }
} catch (Throwable e) {
reportWtf("starting VCN Management Service", e);
}