Replace BaseNetworkObserver with BaseNetdUnsolicitedEventListener
ConnectivityService will be a part of mainline module, to prevent using @hide API of NetworkManagementService in TestNetworkService, use function inside NetdUtils instead. Bug: 170598012 Test: atest FrameworksNetTests CtsNetTestCasesLatestSdk Change-Id: Id615f7b900d26d0f5887adcd8221dc8bef239923
This commit is contained in:
@@ -91,7 +91,6 @@ import android.net.IConnectivityManager;
|
|||||||
import android.net.IDnsResolver;
|
import android.net.IDnsResolver;
|
||||||
import android.net.INetd;
|
import android.net.INetd;
|
||||||
import android.net.INetworkActivityListener;
|
import android.net.INetworkActivityListener;
|
||||||
import android.net.INetworkManagementEventObserver;
|
|
||||||
import android.net.INetworkMonitor;
|
import android.net.INetworkMonitor;
|
||||||
import android.net.INetworkMonitorCallbacks;
|
import android.net.INetworkMonitorCallbacks;
|
||||||
import android.net.INetworkPolicyListener;
|
import android.net.INetworkPolicyListener;
|
||||||
@@ -194,6 +193,7 @@ import com.android.internal.util.IndentingPrintWriter;
|
|||||||
import com.android.internal.util.LocationPermissionChecker;
|
import com.android.internal.util.LocationPermissionChecker;
|
||||||
import com.android.internal.util.MessageUtils;
|
import com.android.internal.util.MessageUtils;
|
||||||
import com.android.modules.utils.BasicShellCommandHandler;
|
import com.android.modules.utils.BasicShellCommandHandler;
|
||||||
|
import com.android.net.module.util.BaseNetdUnsolicitedEventListener;
|
||||||
import com.android.net.module.util.CollectionUtils;
|
import com.android.net.module.util.CollectionUtils;
|
||||||
import com.android.net.module.util.LinkPropertiesUtils.CompareOrUpdateResult;
|
import com.android.net.module.util.LinkPropertiesUtils.CompareOrUpdateResult;
|
||||||
import com.android.net.module.util.LinkPropertiesUtils.CompareResult;
|
import com.android.net.module.util.LinkPropertiesUtils.CompareResult;
|
||||||
@@ -213,7 +213,6 @@ import com.android.server.connectivity.NetworkRanker;
|
|||||||
import com.android.server.connectivity.PermissionMonitor;
|
import com.android.server.connectivity.PermissionMonitor;
|
||||||
import com.android.server.connectivity.ProxyTracker;
|
import com.android.server.connectivity.ProxyTracker;
|
||||||
import com.android.server.connectivity.QosCallbackTracker;
|
import com.android.server.connectivity.QosCallbackTracker;
|
||||||
import com.android.server.net.BaseNetworkObserver;
|
|
||||||
import com.android.server.net.NetworkPolicyManagerInternal;
|
import com.android.server.net.NetworkPolicyManagerInternal;
|
||||||
import com.android.server.utils.PriorityDump;
|
import com.android.server.utils.PriorityDump;
|
||||||
|
|
||||||
@@ -331,6 +330,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
private INetworkStatsService mStatsService;
|
private INetworkStatsService mStatsService;
|
||||||
private NetworkPolicyManager mPolicyManager;
|
private NetworkPolicyManager mPolicyManager;
|
||||||
private NetworkPolicyManagerInternal mPolicyManagerInternal;
|
private NetworkPolicyManagerInternal mPolicyManagerInternal;
|
||||||
|
private final NetdCallback mNetdCallback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TestNetworkService (lazily) created upon first usage. Locked to prevent creation of multiple
|
* TestNetworkService (lazily) created upon first usage. Locked to prevent creation of multiple
|
||||||
@@ -1203,6 +1203,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
|
|
||||||
mNetworkActivityTracker = new LegacyNetworkActivityTracker(mContext, mHandler, mNMS, mNetd);
|
mNetworkActivityTracker = new LegacyNetworkActivityTracker(mContext, mHandler, mNMS, mNetd);
|
||||||
|
|
||||||
|
mNetdCallback = new NetdCallback();
|
||||||
|
try {
|
||||||
|
mNetd.registerUnsolicitedEventListener(mNetdCallback);
|
||||||
|
} catch (RemoteException | ServiceSpecificException e) {
|
||||||
|
loge("Error registering event listener :" + e);
|
||||||
|
}
|
||||||
|
|
||||||
mSettingsObserver = new SettingsObserver(mContext, mHandler);
|
mSettingsObserver = new SettingsObserver(mContext, mHandler);
|
||||||
registerSettingsCallbacks();
|
registerSettingsCallbacks();
|
||||||
|
|
||||||
@@ -8648,6 +8655,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
notifyDataStallSuspected(p, network.getNetId());
|
notifyDataStallSuspected(p, network.getNetId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class NetdCallback extends BaseNetdUnsolicitedEventListener {
|
||||||
|
@Override
|
||||||
|
public void onInterfaceClassActivityChanged(boolean isActive, int timerLabel,
|
||||||
|
long timestampNs, int uid) {
|
||||||
|
mNetworkActivityTracker.setAndReportNetworkActive(isActive, timerLabel, timestampNs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private final LegacyNetworkActivityTracker mNetworkActivityTracker;
|
private final LegacyNetworkActivityTracker mNetworkActivityTracker;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -8658,7 +8673,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
private static final int NO_UID = -1;
|
private static final int NO_UID = -1;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final INetd mNetd;
|
private final INetd mNetd;
|
||||||
private final INetworkManagementService mNMS;
|
|
||||||
private final RemoteCallbackList<INetworkActivityListener> mNetworkActivityListeners =
|
private final RemoteCallbackList<INetworkActivityListener> mNetworkActivityListeners =
|
||||||
new RemoteCallbackList<>();
|
new RemoteCallbackList<>();
|
||||||
// Indicate the current system default network activity is active or not.
|
// Indicate the current system default network activity is active or not.
|
||||||
@@ -8681,41 +8695,27 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
LegacyNetworkActivityTracker(@NonNull Context context, @NonNull Handler handler,
|
LegacyNetworkActivityTracker(@NonNull Context context, @NonNull Handler handler,
|
||||||
@NonNull INetworkManagementService nms, @NonNull INetd netd) {
|
@NonNull INetworkManagementService nms, @NonNull INetd netd) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mNMS = nms;
|
|
||||||
mNetd = netd;
|
mNetd = netd;
|
||||||
mHandler = handler;
|
mHandler = handler;
|
||||||
try {
|
|
||||||
mNMS.registerObserver(mDataActivityObserver);
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
loge("Error registering observer :" + e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Migrate away the dependency with INetworkManagementEventObserver.
|
public void setAndReportNetworkActive(boolean active, int transportType, long tsNanos) {
|
||||||
private final INetworkManagementEventObserver mDataActivityObserver =
|
sendDataActivityBroadcast(transportTypeToLegacyType(transportType), active, tsNanos);
|
||||||
new BaseNetworkObserver() {
|
synchronized (mActiveIdleTimers) {
|
||||||
@Override
|
mNetworkActive = active;
|
||||||
public void interfaceClassDataActivityChanged(int transportType, boolean active,
|
// If there are no idle timers, it means that system is not monitoring
|
||||||
long tsNanos, int uid) {
|
// activity, so the system default network for those default network
|
||||||
sendDataActivityBroadcast(transportTypeToLegacyType(transportType), active,
|
// unspecified apps is always considered active.
|
||||||
tsNanos);
|
//
|
||||||
synchronized (mActiveIdleTimers) {
|
// TODO: If the mActiveIdleTimers is empty, netd will actually not send
|
||||||
mNetworkActive = active;
|
// any network activity change event. Whenever this event is received,
|
||||||
// If there are no idle timers, it means that system is not monitoring
|
// the mActiveIdleTimers should be always not empty. The legacy behavior
|
||||||
// activity, so the system default network for those default network
|
// is no-op. Remove to refer to mNetworkActive only.
|
||||||
// unspecified apps is always considered active.
|
if (mNetworkActive || mActiveIdleTimers.isEmpty()) {
|
||||||
//
|
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REPORT_NETWORK_ACTIVITY));
|
||||||
// TODO: If the mActiveIdleTimers is empty, netd will actually not send
|
}
|
||||||
// any network activity change event. Whenever this event is received,
|
}
|
||||||
// the mActiveIdleTimers should be always not empty. The legacy behavior
|
}
|
||||||
// is no-op. Remove to refer to mNetworkActive only.
|
|
||||||
if (mNetworkActive || mActiveIdleTimers.isEmpty()) {
|
|
||||||
mHandler.sendMessage(
|
|
||||||
mHandler.obtainMessage(EVENT_REPORT_NETWORK_ACTIVITY));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// The network activity should only be updated from ConnectivityService handler thread
|
// The network activity should only be updated from ConnectivityService handler thread
|
||||||
// when mActiveIdleTimers lock is held.
|
// when mActiveIdleTimers lock is held.
|
||||||
|
|||||||
Reference in New Issue
Block a user