diff options
| author | 2024-10-18 20:26:55 +0000 | |
|---|---|---|
| committer | 2024-10-18 20:26:55 +0000 | |
| commit | e811f5a5fdf743b2f2839ac7d4c05dc1eff45eed (patch) | |
| tree | 3990a71d5c38a31910a4b1119687bf34adb06dbf | |
| parent | d7ebfd8322e01ca12620b144e111ae558480d206 (diff) | |
| parent | 6a699a443a07fb1f3b9985e048c66699a4755cf2 (diff) | |
Merge "Register VcnManager with VcnFrameworkInitializer" into main
| -rw-r--r-- | core/java/android/app/SystemServiceRegistry.java | 70 | ||||
| -rw-r--r-- | core/java/android/net/vcn/VcnFrameworkInitializer.java | 106 |
2 files changed, 109 insertions, 67 deletions
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 8f298db27e65..89d353c9d3de 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -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; @@ -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; @@ -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; @@ -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 = @@ -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 @@ -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(); } @@ -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 diff --git a/core/java/android/net/vcn/VcnFrameworkInitializer.java b/core/java/android/net/vcn/VcnFrameworkInitializer.java new file mode 100644 index 000000000000..8cb213b306be --- /dev/null +++ b/core/java/android/net/vcn/VcnFrameworkInitializer.java @@ -0,0 +1,106 @@ +/* + * 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); + }); + } +} |