Loading core/java/android/app/SystemServiceRegistry.java +3 −67 Original line number Diff line number Diff line Loading @@ -66,8 +66,6 @@ import android.companion.ICompanionDeviceManager; import android.companion.virtual.IVirtualDeviceManager; import android.companion.virtual.VirtualDeviceManager; import android.compat.Compatibility; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.content.ClipboardManager; import android.content.ContentCaptureOptions; import android.content.Context; Loading Loading @@ -162,8 +160,7 @@ import android.net.NetworkWatchlistManager; import android.net.PacProxyManager; import android.net.TetheringManager; import android.net.VpnManager; import android.net.vcn.IVcnManagementService; import android.net.vcn.VcnManager; import android.net.vcn.VcnFrameworkInitializer; import android.net.wifi.WifiFrameworkInitializer; import android.net.wifi.nl80211.WifiNl80211Manager; import android.net.wifi.sharedconnectivity.app.SharedConnectivityManager; Loading Loading @@ -198,7 +195,6 @@ import android.os.ServiceManager; import android.os.ServiceManager.ServiceNotFoundException; import android.os.StatsFrameworkInitializer; import android.os.SystemConfigManager; import android.os.SystemProperties; import android.os.SystemUpdateManager; import android.os.SystemVibrator; import android.os.SystemVibratorManager; Loading Loading @@ -289,28 +285,6 @@ public final class SystemServiceRegistry { /** @hide */ public static boolean sEnableServiceNotFoundWtf = false; /** * 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. * * This change is specific to VcnManager. */ @ChangeId @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM) static final long ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN = 330902016; /** * The corresponding vendor API for Android V * * <p>Starting with Android V, the vendor API format has switched to YYYYMM. * * @see <a href="https://preview.source.android.com/docs/core/architecture/api-flags">Vendor API * level</a> */ private static final int VENDOR_API_FOR_ANDROID_V = 202404; // Service registry information. // This information is never changed once static initialization has completed. private static final Map<Class<?>, String> SYSTEM_SERVICE_NAMES = Loading Loading @@ -472,22 +446,6 @@ public final class SystemServiceRegistry { return new VpnManager(ctx, service); }}); registerService(Context.VCN_MANAGEMENT_SERVICE, VcnManager.class, new CachedServiceFetcher<VcnManager>() { @Override public VcnManager createService(ContextImpl ctx) throws ServiceNotFoundException { final String telephonyFeatureToCheck = getVcnFeatureDependency(); if (telephonyFeatureToCheck != null && !ctx.getPackageManager().hasSystemFeature(telephonyFeatureToCheck)) { return null; } IBinder b = ServiceManager.getService(Context.VCN_MANAGEMENT_SERVICE); IVcnManagementService service = IVcnManagementService.Stub.asInterface(b); return new VcnManager(ctx, service); }}); registerService(Context.COUNTRY_DETECTOR, CountryDetector.class, new StaticServiceFetcher<CountryDetector>() { @Override Loading Loading @@ -1721,6 +1679,8 @@ public final class SystemServiceRegistry { OnDevicePersonalizationFrameworkInitializer.registerServiceWrappers(); DeviceLockFrameworkInitializer.registerServiceWrappers(); VirtualizationFrameworkInitializer.registerServiceWrappers(); VcnFrameworkInitializer.registerServiceWrappers(); if (com.android.server.telecom.flags.Flags.telecomMainlineBlockedNumbersManager()) { ProviderFrameworkInitializer.registerServiceWrappers(); } Loading Loading @@ -1782,30 +1742,6 @@ public final class SystemServiceRegistry { return manager.hasSystemFeature(featureName); } // Suppressing AndroidFrameworkCompatChange because we're querying vendor // partition SDK level, not application's target SDK version (which BTW we // also check through Compatibility framework a few lines below). @SuppressWarnings("AndroidFrameworkCompatChange") @Nullable 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)) { return null; } // Check SDK version of the vendor partition. Pre-V devices might have // incorrectly under-declared telephony features. final int vendorApiLevel = SystemProperties.getInt( "ro.vendor.api_level", Build.VERSION.DEVICE_INITIAL_SDK_INT); if (vendorApiLevel < VENDOR_API_FOR_ANDROID_V) { return PackageManager.FEATURE_TELEPHONY; } else { return PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION; } } /** * Gets a system service from a given context. * @hide Loading core/java/android/net/vcn/VcnFrameworkInitializer.java 0 → 100644 +106 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.vcn; import android.annotation.Nullable; 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.os.Build; import android.os.SystemProperties; /** * Class for performing registration for VCN service. * * @hide */ // TODO: Expose it as @SystemApi(client = MODULE_LIBRARIES) public final class VcnFrameworkInitializer { /** * 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; /** * The corresponding vendor API for Android V * * <p>Starting with Android V, the vendor API format has switched to YYYYMM. * * @see <a href="https://preview.source.android.com/docs/core/architecture/api-flags">Vendor API * level</a> */ private static final int VENDOR_API_FOR_ANDROID_V = 202404; private VcnFrameworkInitializer() {} // Suppressing AndroidFrameworkCompatChange because we're querying vendor // partition SDK level, not application's target SDK version (which BTW we // also check through Compatibility framework a few lines below). @Nullable 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)) { return null; } // Check SDK version of the vendor partition. Pre-V devices might have // incorrectly under-declared telephony features. final int vendorApiLevel = SystemProperties.getInt( "ro.vendor.api_level", Build.VERSION.DEVICE_INITIAL_SDK_INT); if (vendorApiLevel < VENDOR_API_FOR_ANDROID_V) { return PackageManager.FEATURE_TELEPHONY; } else { return PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION; } } /** * Register VCN service to {@link Context}, so that {@link Context#getSystemService} can return * a VcnManager. * * @throws IllegalStateException if this is called anywhere besides {@link * SystemServiceRegistry}. */ public static void registerServiceWrappers() { SystemServiceRegistry.registerContextAwareService( VcnManager.VCN_MANAGEMENT_SERVICE_STRING, VcnManager.class, (context, serviceBinder) -> { final String telephonyFeatureToCheck = getVcnFeatureDependency(); if (telephonyFeatureToCheck != null && !context.getPackageManager() .hasSystemFeature(telephonyFeatureToCheck)) { return null; } IVcnManagementService service = IVcnManagementService.Stub.asInterface(serviceBinder); return new VcnManager(context, service); }); } } Loading
core/java/android/app/SystemServiceRegistry.java +3 −67 Original line number Diff line number Diff line Loading @@ -66,8 +66,6 @@ import android.companion.ICompanionDeviceManager; import android.companion.virtual.IVirtualDeviceManager; import android.companion.virtual.VirtualDeviceManager; import android.compat.Compatibility; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.content.ClipboardManager; import android.content.ContentCaptureOptions; import android.content.Context; Loading Loading @@ -162,8 +160,7 @@ import android.net.NetworkWatchlistManager; import android.net.PacProxyManager; import android.net.TetheringManager; import android.net.VpnManager; import android.net.vcn.IVcnManagementService; import android.net.vcn.VcnManager; import android.net.vcn.VcnFrameworkInitializer; import android.net.wifi.WifiFrameworkInitializer; import android.net.wifi.nl80211.WifiNl80211Manager; import android.net.wifi.sharedconnectivity.app.SharedConnectivityManager; Loading Loading @@ -198,7 +195,6 @@ import android.os.ServiceManager; import android.os.ServiceManager.ServiceNotFoundException; import android.os.StatsFrameworkInitializer; import android.os.SystemConfigManager; import android.os.SystemProperties; import android.os.SystemUpdateManager; import android.os.SystemVibrator; import android.os.SystemVibratorManager; Loading Loading @@ -289,28 +285,6 @@ public final class SystemServiceRegistry { /** @hide */ public static boolean sEnableServiceNotFoundWtf = false; /** * 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. * * This change is specific to VcnManager. */ @ChangeId @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM) static final long ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN = 330902016; /** * The corresponding vendor API for Android V * * <p>Starting with Android V, the vendor API format has switched to YYYYMM. * * @see <a href="https://preview.source.android.com/docs/core/architecture/api-flags">Vendor API * level</a> */ private static final int VENDOR_API_FOR_ANDROID_V = 202404; // Service registry information. // This information is never changed once static initialization has completed. private static final Map<Class<?>, String> SYSTEM_SERVICE_NAMES = Loading Loading @@ -472,22 +446,6 @@ public final class SystemServiceRegistry { return new VpnManager(ctx, service); }}); registerService(Context.VCN_MANAGEMENT_SERVICE, VcnManager.class, new CachedServiceFetcher<VcnManager>() { @Override public VcnManager createService(ContextImpl ctx) throws ServiceNotFoundException { final String telephonyFeatureToCheck = getVcnFeatureDependency(); if (telephonyFeatureToCheck != null && !ctx.getPackageManager().hasSystemFeature(telephonyFeatureToCheck)) { return null; } IBinder b = ServiceManager.getService(Context.VCN_MANAGEMENT_SERVICE); IVcnManagementService service = IVcnManagementService.Stub.asInterface(b); return new VcnManager(ctx, service); }}); registerService(Context.COUNTRY_DETECTOR, CountryDetector.class, new StaticServiceFetcher<CountryDetector>() { @Override Loading Loading @@ -1721,6 +1679,8 @@ public final class SystemServiceRegistry { OnDevicePersonalizationFrameworkInitializer.registerServiceWrappers(); DeviceLockFrameworkInitializer.registerServiceWrappers(); VirtualizationFrameworkInitializer.registerServiceWrappers(); VcnFrameworkInitializer.registerServiceWrappers(); if (com.android.server.telecom.flags.Flags.telecomMainlineBlockedNumbersManager()) { ProviderFrameworkInitializer.registerServiceWrappers(); } Loading Loading @@ -1782,30 +1742,6 @@ public final class SystemServiceRegistry { return manager.hasSystemFeature(featureName); } // Suppressing AndroidFrameworkCompatChange because we're querying vendor // partition SDK level, not application's target SDK version (which BTW we // also check through Compatibility framework a few lines below). @SuppressWarnings("AndroidFrameworkCompatChange") @Nullable 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)) { return null; } // Check SDK version of the vendor partition. Pre-V devices might have // incorrectly under-declared telephony features. final int vendorApiLevel = SystemProperties.getInt( "ro.vendor.api_level", Build.VERSION.DEVICE_INITIAL_SDK_INT); if (vendorApiLevel < VENDOR_API_FOR_ANDROID_V) { return PackageManager.FEATURE_TELEPHONY; } else { return PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION; } } /** * Gets a system service from a given context. * @hide Loading
core/java/android/net/vcn/VcnFrameworkInitializer.java 0 → 100644 +106 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.vcn; import android.annotation.Nullable; 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.os.Build; import android.os.SystemProperties; /** * Class for performing registration for VCN service. * * @hide */ // TODO: Expose it as @SystemApi(client = MODULE_LIBRARIES) public final class VcnFrameworkInitializer { /** * 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; /** * The corresponding vendor API for Android V * * <p>Starting with Android V, the vendor API format has switched to YYYYMM. * * @see <a href="https://preview.source.android.com/docs/core/architecture/api-flags">Vendor API * level</a> */ private static final int VENDOR_API_FOR_ANDROID_V = 202404; private VcnFrameworkInitializer() {} // Suppressing AndroidFrameworkCompatChange because we're querying vendor // partition SDK level, not application's target SDK version (which BTW we // also check through Compatibility framework a few lines below). @Nullable 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)) { return null; } // Check SDK version of the vendor partition. Pre-V devices might have // incorrectly under-declared telephony features. final int vendorApiLevel = SystemProperties.getInt( "ro.vendor.api_level", Build.VERSION.DEVICE_INITIAL_SDK_INT); if (vendorApiLevel < VENDOR_API_FOR_ANDROID_V) { return PackageManager.FEATURE_TELEPHONY; } else { return PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION; } } /** * Register VCN service to {@link Context}, so that {@link Context#getSystemService} can return * a VcnManager. * * @throws IllegalStateException if this is called anywhere besides {@link * SystemServiceRegistry}. */ public static void registerServiceWrappers() { SystemServiceRegistry.registerContextAwareService( VcnManager.VCN_MANAGEMENT_SERVICE_STRING, VcnManager.class, (context, serviceBinder) -> { final String telephonyFeatureToCheck = getVcnFeatureDependency(); if (telephonyFeatureToCheck != null && !context.getPackageManager() .hasSystemFeature(telephonyFeatureToCheck)) { return null; } IVcnManagementService service = IVcnManagementService.Stub.asInterface(serviceBinder); return new VcnManager(context, service); }); } }