Use NetworkCallback in BatteryStatsService to get connectivity change
Currently, battery stats service uses noteConnectivityChanged in
connectivity service(CS) to pass connection state and the type of
connection for BatteryStats. However, CS is going to be a mainline
module which can only access formal API. noteConnectivityChanged
is a hidden API and it pass LegacyNetworkType which has been
deprecated years ago, so it should avoid to expose this API with
a deprecated argument. Thus, register a NetworkCallback in
BattyeryStatsService to listen the network capabilities changed to
remove the noteConnectivityChanged from connectivity service.
Besides, let noteConnectivityChanged take display transport instead
of legacy network type.
Bug: 171686421
Test: atest FrameworksNetTests
atest FrameworksCoreTests:BatteryStatsTests
Change-Id: I3dac94ec06f673aa719e124f1ef3d8169f68f9fb
This commit is contained in:
@@ -2384,13 +2384,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
final BroadcastOptions opts = BroadcastOptions.makeBasic();
|
||||
opts.setMaxManifestReceiverApiLevel(Build.VERSION_CODES.M);
|
||||
options = opts.toBundle();
|
||||
final IBatteryStats bs = mDeps.getBatteryStatsService();
|
||||
try {
|
||||
bs.noteConnectivityChanged(intent.getIntExtra(
|
||||
ConnectivityManager.EXTRA_NETWORK_TYPE, ConnectivityManager.TYPE_NONE),
|
||||
ni.getState().toString());
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
intent.addFlags(Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS);
|
||||
}
|
||||
try {
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
|
||||
package com.android.server.am;
|
||||
|
||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.bluetooth.BluetoothActivityEnergyInfo;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
@@ -25,7 +28,9 @@ import android.hardware.power.stats.PowerEntity;
|
||||
import android.hardware.power.stats.State;
|
||||
import android.hardware.power.stats.StateResidency;
|
||||
import android.hardware.power.stats.StateResidencyResult;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.INetworkManagementEventObserver;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.os.BatteryStats;
|
||||
import android.os.BatteryStatsInternal;
|
||||
@@ -77,6 +82,7 @@ import com.android.internal.util.DumpUtils;
|
||||
import com.android.internal.util.FrameworkStatsLog;
|
||||
import com.android.internal.util.ParseUtils;
|
||||
import com.android.internal.util.function.pooled.PooledLambda;
|
||||
import com.android.net.module.util.NetworkCapabilitiesUtils;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.Watchdog;
|
||||
import com.android.server.net.BaseNetworkObserver;
|
||||
@@ -291,6 +297,23 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
private ConnectivityManager.NetworkCallback mNetworkCallback =
|
||||
new ConnectivityManager.NetworkCallback() {
|
||||
@Override
|
||||
public void onCapabilitiesChanged(@NonNull Network network,
|
||||
@NonNull NetworkCapabilities networkCapabilities) {
|
||||
final String state = networkCapabilities.hasCapability(NET_CAPABILITY_NOT_SUSPENDED)
|
||||
? "CONNECTED" : "SUSPENDED";
|
||||
noteConnectivityChanged(NetworkCapabilitiesUtils.getDisplayTransport(
|
||||
networkCapabilities.getTransportTypes()), state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLost(Network network) {
|
||||
noteConnectivityChanged(-1, "DISCONNECTED");
|
||||
}
|
||||
};
|
||||
|
||||
BatteryStatsService(Context context, File systemDir, Handler handler) {
|
||||
// BatteryStatsImpl expects the ActivityManagerService handler, so pass that one through.
|
||||
mContext = context;
|
||||
@@ -330,8 +353,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
mWorker.systemServicesReady();
|
||||
final INetworkManagementService nms = INetworkManagementService.Stub.asInterface(
|
||||
ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE));
|
||||
final ConnectivityManager cm = mContext.getSystemService(ConnectivityManager.class);
|
||||
try {
|
||||
nms.registerObserver(mActivityChangeObserver);
|
||||
cm.registerDefaultNetworkCallback(mNetworkCallback);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Could not register INetworkManagement event observer " + e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user