diff options
author | 2024-12-11 11:29:09 -0800 | |
---|---|---|
committer | 2024-12-11 11:29:09 -0800 | |
commit | 805611d7ee439f0812f3e51573d00ecfe6dcf2b7 (patch) | |
tree | 32f05699e712724cc07de270c379ef58a89e848f | |
parent | f9b2fa590f5037fe854fcb418ac1ee538ae27b56 (diff) | |
parent | bbf3e13778dc1f4c14689a21aaf06875266d0911 (diff) |
Merge "Conditionally remove VCN jars from non-updatable platform" into main am: 08e435ddf7 am: bbf3e13778
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3371576
Change-Id: I58b05bd2fdd9b63010c7759793cd9838b9503332
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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 a7cb9bb9af24..473911f08cf7 100644 --- a/services/Android.bp +++ b/services/Android.bp @@ -312,9 +312,11 @@ system_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 cbbb285ff1d0..06f9e2bf55b2 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -149,6 +149,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 dccd0be31bc6..29e0487dad0a 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -293,6 +293,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; @@ -2238,10 +2239,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); } |