Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b32fabce authored by lucaslin's avatar lucaslin
Browse files

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
parent a3ab19e8
Loading
Loading
Loading
Loading
+36 −36
Original line number Original line Diff line number Diff line
@@ -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,24 +8695,12 @@ 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() {
                    @Override
                    public void interfaceClassDataActivityChanged(int transportType, boolean active,
                            long tsNanos, int uid) {
                        sendDataActivityBroadcast(transportTypeToLegacyType(transportType), active,
                                tsNanos);
            synchronized (mActiveIdleTimers) {
            synchronized (mActiveIdleTimers) {
                mNetworkActive = active;
                mNetworkActive = active;
                // If there are no idle timers, it means that system is not monitoring
                // If there are no idle timers, it means that system is not monitoring
@@ -8710,12 +8712,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
                // the mActiveIdleTimers should be always not empty. The legacy behavior
                // the mActiveIdleTimers should be always not empty. The legacy behavior
                // is no-op. Remove to refer to mNetworkActive only.
                // is no-op. Remove to refer to mNetworkActive only.
                if (mNetworkActive || mActiveIdleTimers.isEmpty()) {
                if (mNetworkActive || mActiveIdleTimers.isEmpty()) {
                                mHandler.sendMessage(
                    mHandler.sendMessage(mHandler.obtainMessage(EVENT_REPORT_NETWORK_ACTIVITY));
                                        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.