diff options
| author | 2023-05-04 15:46:00 +0000 | |
|---|---|---|
| committer | 2023-05-04 16:04:08 +0000 | |
| commit | a0052e490e44b438dfa80fc9ace79f7a3f5e579c (patch) | |
| tree | 63a15885821b1ea36535a8ecf09a08c2d3015d27 | |
| parent | e6d80348a582d044ad14bddccd4016cbb1cde900 (diff) | |
[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
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java | 18 | ||||
| -rw-r--r-- | packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java | 12 |
2 files changed, 27 insertions, 3 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java index adaf4a1d3ab5..c45d77471932 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java @@ -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); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java index 6e975cf9d8f3..5a9a9d154070 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java @@ -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) + } } |