summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Caitlin Shkuratov <caitlinshk@google.com> 2023-05-04 15:46:00 +0000
committer Caitlin Shkuratov <caitlinshk@google.com> 2023-05-04 16:04:08 +0000
commita0052e490e44b438dfa80fc9ace79f7a3f5e579c (patch)
tree63a15885821b1ea36535a8ecf09a08c2d3015d27
parente6d80348a582d044ad14bddccd4016cbb1cde900 (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.java18
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java12
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)
+ }
}