From e764686003911cf5c4d8e950746b33e9eaaa2542 Mon Sep 17 00:00:00 2001 From: Junyu Lai Date: Wed, 26 Jan 2022 18:46:46 +0000 Subject: [PATCH] [MS62.2] Add NetworkStatsService into service initializer NetworkStatsService is going to be moved into Connectivity mainlne module and it will be not visible to SystemServiceResistry after migration done. Thus, register service in NetworkStatsServiceInitialalizer and register manager in ConnectivityFrameworkInitializerTiramisu instead. Ignore-AOSP-First: Avoiding conflicts; cherry-pick will follow Test: FrameworksNetTests CtsNetTestCases Bug: 204830222 (cherry-picked from ag/16727131) Change-Id: I03d947cc54dd995f6b5b4544ee3bf03cf029d143 Merged-In: I03d947cc54dd995f6b5b4544ee3bf03cf029d143 --- .../NetworkStatsServiceInitializer.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 service-t/src/com/android/server/NetworkStatsServiceInitializer.java diff --git a/service-t/src/com/android/server/NetworkStatsServiceInitializer.java b/service-t/src/com/android/server/NetworkStatsServiceInitializer.java new file mode 100644 index 0000000000..0ea126a487 --- /dev/null +++ b/service-t/src/com/android/server/NetworkStatsServiceInitializer.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2022 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 com.android.server; + +import android.content.Context; +import android.net.TrafficStats; +import android.util.Log; + +import com.android.modules.utils.build.SdkLevel; +import com.android.server.net.NetworkStatsService; + +/** + * NetworkStats service initializer for core networking. This is called by system server to create + * a new instance of NetworkStatsService. + */ +public final class NetworkStatsServiceInitializer extends SystemService { + private static final String TAG = NetworkStatsServiceInitializer.class.getSimpleName(); + private final NetworkStatsService mStatsService; + + public NetworkStatsServiceInitializer(Context context) { + super(context); + // Load JNI libraries used by NetworkStatsService and its dependencies + System.loadLibrary("service-connectivity"); + mStatsService = maybeCreateNetworkStatsService(context); + } + + @Override + public void onStart() { + if (mStatsService != null) { + Log.i(TAG, "Registering " + Context.NETWORK_STATS_SERVICE); + publishBinderService(Context.NETWORK_STATS_SERVICE, mStatsService, + /* allowIsolated= */ false); + TrafficStats.init(getContext()); + } + } + + @Override + public void onBootPhase(int phase) { + // This has to be run before StatsPullAtomService query usage at + // PHASE_THIRD_PARTY_APPS_CAN_START. + if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY && mStatsService != null) { + mStatsService.systemReady(); + } + } + + /** + * Return NetworkStatsService instance, or null if current SDK is lower than T. + */ + private NetworkStatsService maybeCreateNetworkStatsService(final Context context) { + if (!SdkLevel.isAtLeastT()) return null; + + return NetworkStatsService.create(context); + } +}