From e46555d42a74f3dcaef1ea2bb8c63c86a2d7da8a Mon Sep 17 00:00:00 2001 From: paulhu Date: Tue, 23 Nov 2021 16:16:13 +0800 Subject: [PATCH] Register NSD service from ConnectivityFrameworkInitializerTiramisu INsdManager is going to move into connectivity mainline module and it will be not visible to SystemServiceRegistry after migration done. Thus, use ConnectivityFrameworkInitializerTiramisu to register NSD service instead. ConnectivityFrameworkInitializerTiramisu will be implemented in the framework-connectivity-tiramisu bootclasspath JAR, which need to be separated from the S+ framework-connectivity bootclasspath JAR to be only loaded by the module on T+. So its methods cannot be in the same class as ConnectivityFrameworkInitializer. Bug: 206702844 Test: atest FrameworksNetTests CtsNetTestCases Merged-In: Ibf89ab9a35e35dac4978ba70c7ab306b6155a4a3 Change-Id: Ibf89ab9a35e35dac4978ba70c7ab306b6155a4a3 --- framework-t/Sources.bp | 14 ++++- ...nectivityFrameworkInitializerTiramisu.java | 52 +++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 framework-t/src/android/net/ConnectivityFrameworkInitializerTiramisu.java diff --git a/framework-t/Sources.bp b/framework-t/Sources.bp index 9c07f399f9..3e82b28ce6 100644 --- a/framework-t/Sources.bp +++ b/framework-t/Sources.bp @@ -102,13 +102,25 @@ filegroup { // Connectivity-T common libraries. +filegroup { + name: "framework-connectivity-tiramisu-internal-sources", + srcs: [ + "src/android/net/ConnectivityFrameworkInitializerTiramisu.java", + ], + path: "src", + visibility: [ + "//visibility:private", + ], +} + filegroup { name: "framework-connectivity-tiramisu-sources", srcs: [ ":framework-connectivity-netstats-sources", ":framework-connectivity-nsd-sources", + ":framework-connectivity-tiramisu-internal-sources", ], visibility: [ "//frameworks/base", ], -} \ No newline at end of file +} diff --git a/framework-t/src/android/net/ConnectivityFrameworkInitializerTiramisu.java b/framework-t/src/android/net/ConnectivityFrameworkInitializerTiramisu.java new file mode 100644 index 0000000000..630f902ecf --- /dev/null +++ b/framework-t/src/android/net/ConnectivityFrameworkInitializerTiramisu.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2021 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; + +import android.annotation.SystemApi; +import android.app.SystemServiceRegistry; +import android.content.Context; +import android.net.nsd.INsdManager; +import android.net.nsd.NsdManager; + +/** + * Class for performing registration for Connectivity services which are exposed via updatable APIs + * since Android T. + * + * @hide + */ +@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) +public final class ConnectivityFrameworkInitializerTiramisu { + private ConnectivityFrameworkInitializerTiramisu() {} + + /** + * Called by {@link SystemServiceRegistry}'s static initializer and registers nsd services to + * {@link Context}, so that {@link Context#getSystemService} can return them. + * + * @throws IllegalStateException if this is called anywhere besides + * {@link SystemServiceRegistry}. + */ + public static void registerServiceWrappers() { + SystemServiceRegistry.registerContextAwareService( + Context.NSD_SERVICE, + NsdManager.class, + (context, serviceBinder) -> { + INsdManager service = INsdManager.Stub.asInterface(serviceBinder); + return new NsdManager(context, service); + } + ); + } +}