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

Commit a0052e49 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[SB Refactor] Add null checks around network capabilities.

It's still not clear to me how the old code didn't NPE but ag/22820241
started causing some NPEs, because ConnectivityManager specifies that
the NetworkCapabilities from #onCapabilitiesChanged will be non-null
(and the old code didn't check nullability). But, let's fix the crashes
now anyway.

I don't believe we need to fix the new pipeline because I haven't seen
any crash clusters come through.

Fixes: 280169520
Test: atest WifiStatusTrackerTest
Change-Id: I1f100b9d799d220505ac4ebf133ee7aae551f833
parent e6d80348
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -343,7 +343,12 @@ public class WifiStatusTracker {
    }

    @Nullable
    private WifiInfo getMainOrUnderlyingWifiInfo(NetworkCapabilities networkCapabilities) {
    private WifiInfo getMainOrUnderlyingWifiInfo(
            @Nullable NetworkCapabilities networkCapabilities) {
        if (networkCapabilities == null) {
            return null;
        }

        WifiInfo mainWifiInfo = getMainWifiInfo(networkCapabilities);
        if (mainWifiInfo != null) {
            return mainWifiInfo;
@@ -376,7 +381,10 @@ public class WifiStatusTracker {
    }

    @Nullable
    private WifiInfo getMainWifiInfo(NetworkCapabilities networkCapabilities) {
    private WifiInfo getMainWifiInfo(@Nullable NetworkCapabilities networkCapabilities) {
        if (networkCapabilities == null) {
            return null;
        }
        boolean canHaveWifiInfo = networkCapabilities.hasTransport(TRANSPORT_WIFI)
                || networkCapabilities.hasTransport(TRANSPORT_CELLULAR);
        if (!canHaveWifiInfo) {
@@ -402,7 +410,11 @@ public class WifiStatusTracker {
                getMainOrUnderlyingWifiInfo(networkCapabilities));
    }

    private boolean connectionIsWifi(NetworkCapabilities networkCapabilities, WifiInfo wifiInfo) {
    private boolean connectionIsWifi(
            @Nullable NetworkCapabilities networkCapabilities, WifiInfo wifiInfo) {
        if (networkCapabilities == null) {
            return false;
        }
        return wifiInfo != null || networkCapabilities.hasTransport(TRANSPORT_WIFI);
    }

+12 −0
Original line number Diff line number Diff line
@@ -305,4 +305,16 @@ public class WifiStatusTrackerTest {

        assertThat(mWifiStatusTracker.isDefaultNetwork).isTrue();
    }

    /** Regression test for b/280169520. */
    @Test
    public void networkCallbackNullCapabilities_noCrash() {
        Network primaryNetwork = Mockito.mock(Network.class);

        // WHEN the network capabilities are null
        mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(
                primaryNetwork, /* networkCapabilities= */ null);

        // THEN there's no crash (no assert needed)
    }
}