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

Commit 6e5fb68f authored by yinxu's avatar yinxu
Browse files

Use the NetworkCallback to determine the default network

Bug: 181187062
Test: Unit tests, manual tests
Change-Id: Ia55d3f5d71039aba4e30f1c98ef2dda068ad1b6b
parent 758c663e
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -165,7 +165,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
    private int mCurrentUserId;

    private OnSubscriptionsChangedListener mSubscriptionListener;

    private NetworkCapabilities mLastDefaultNetworkCapabilities;
    // Handler that all broadcasts are received on.
    private final Handler mReceiverHandler;
    // Handler that all callbacks are made on.
@@ -315,6 +315,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
            public void onLost(Network network) {
                mLastNetwork = null;
                mLastNetworkCapabilities = null;
                mLastDefaultNetworkCapabilities = null;
                String callback = new StringBuilder()
                        .append(SSDF.format(System.currentTimeMillis())).append(",")
                        .append("onLost: ")
@@ -341,6 +342,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
                }
                mLastNetwork = network;
                mLastNetworkCapabilities = networkCapabilities;
                mLastDefaultNetworkCapabilities = networkCapabilities;
                String callback = new StringBuilder()
                        .append(SSDF.format(System.currentTimeMillis())).append(",")
                        .append("onCapabilitiesChanged: ")
@@ -959,18 +961,17 @@ public class NetworkControllerImpl extends BroadcastReceiver
    private void updateConnectivity() {
        mConnectedTransports.clear();
        mValidatedTransports.clear();
        for (NetworkCapabilities nc :
                mConnectivityManager.getDefaultNetworkCapabilitiesForUser(mCurrentUserId)) {
            for (int transportType : nc.getTransportTypes()) {
        if (mLastDefaultNetworkCapabilities != null) {
            for (int transportType : mLastDefaultNetworkCapabilities.getTransportTypes()) {
                if (transportType == NetworkCapabilities.TRANSPORT_CELLULAR
                        && Utils.tryGetWifiInfoForVcn(nc) != null) {
                        && Utils.tryGetWifiInfoForVcn(mLastDefaultNetworkCapabilities) != null) {
                    mConnectedTransports.set(NetworkCapabilities.TRANSPORT_WIFI);
                    if (nc.hasCapability(NET_CAPABILITY_VALIDATED)) {
                    if (mLastDefaultNetworkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)) {
                        mValidatedTransports.set(NetworkCapabilities.TRANSPORT_WIFI);
                    }
                } else {
                    mConnectedTransports.set(transportType);
                    if (nc.hasCapability(NET_CAPABILITY_VALIDATED)) {
                    if (mLastDefaultNetworkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)) {
                        mValidatedTransports.set(transportType);
                    }
                }
+13 −5
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.telephony.NetworkRegistrationInfo.DOMAIN_PS;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
@@ -173,8 +174,6 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
        mMockSubDefaults = mock(SubscriptionDefaults.class);
        mNetCapabilities = new NetworkCapabilities();
        when(mMockCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
        when(mMockCm.getDefaultNetworkCapabilitiesForUser(0)).thenReturn(
                new NetworkCapabilities[] { mNetCapabilities });
        when(mMockTm.createForSubscriptionId(anyInt())).thenReturn(mMockTm);
        doAnswer(invocation -> {
            int rssi = invocation.getArgument(0);
@@ -257,8 +256,11 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
            ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
        verify(mMockCm, atLeastOnce())
            .registerDefaultNetworkCallback(callbackArg.capture(), isA(Handler.class));
        mDefaultCallbackInWifiTracker = callbackArg.getAllValues().get(0);
        mDefaultCallbackInNetworkController = callbackArg.getAllValues().get(1);
        int captureSize = callbackArg.getAllValues().size();
        assertTrue(captureSize > 1);
        assertEquals(captureSize % 2, 0);
        mDefaultCallbackInWifiTracker = callbackArg.getAllValues().get(captureSize - 2);
        mDefaultCallbackInNetworkController = callbackArg.getAllValues().get(captureSize - 1);
        assertNotNull(mDefaultCallbackInWifiTracker);
        assertNotNull(mDefaultCallbackInNetworkController);
        verify(mMockCm, atLeastOnce()).registerNetworkCallback(
@@ -307,6 +309,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
        setLevel(DEFAULT_LEVEL);
        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
                TelephonyManager.NETWORK_TYPE_UMTS);
        setConnectivityViaCallbackInNetworkController(
                NetworkCapabilities.TRANSPORT_CELLULAR, true, true, null);
        setConnectivityViaBroadcast(
                NetworkCapabilities.TRANSPORT_CELLULAR, true, true);
    }
@@ -315,6 +319,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
            int networkType, boolean validated, boolean isConnected, VcnTransportInfo info) {
        mNetCapabilities.setTransportInfo(info);
        setConnectivityCommon(networkType, validated, isConnected);
        mDefaultCallbackInNetworkController.onCapabilitiesChanged(
                mock(Network.class), new NetworkCapabilities(mNetCapabilities));
        Intent i = new Intent(ConnectivityManager.INET_CONDITION_ACTION);
        mNetworkController.onReceive(mContext, i);
    }
@@ -322,6 +328,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
    public void setConnectivityViaBroadcast(
        int networkType, boolean validated, boolean isConnected) {
        setConnectivityCommon(networkType, validated, isConnected);
        mDefaultCallbackInNetworkController.onCapabilitiesChanged(
                mock(Network.class), new NetworkCapabilities(mNetCapabilities));
        Intent i = new Intent(ConnectivityManager.INET_CONDITION_ACTION);
        mNetworkController.onReceive(mContext, i);
    }