From 5c5cd7aa2b0c538db890177b8fca31a197b5d400 Mon Sep 17 00:00:00 2001 From: Sundeep Ghuman Date: Wed, 3 May 2017 12:45:44 -0700 Subject: [PATCH] Fix an NPE that can result from a race condition. NetworkInfo and WifiInfo are set via broadcast receiver so while in a true stable state network info should not be null if wifi info is, this can occur in rare instances due to a race condition. It is convention in AccessPoint.java to always null check network info. Bug: b/37951301 Test: runtest --path frameworks/base/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java Change-Id: Ia1b357c84b961a555ec24a5b930ade35ddf8dbba --- .../src/com/android/settingslib/wifi/AccessPoint.java | 3 ++- .../src/com/android/settingslib/wifi/WifiTrackerTest.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index 5a178a50408b5..eb513e1702862 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -998,7 +998,8 @@ public class AccessPoint implements Comparable { if (mRssi != info.getRssi()) { mRssi = info.getRssi(); updated = true; - } else if (mNetworkInfo.getDetailedState() != networkInfo.getDetailedState()) { + } else if (mNetworkInfo != null && networkInfo != null + && mNetworkInfo.getDetailedState() != networkInfo.getDetailedState()) { updated = true; } mInfo = info; diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java index f519a906eab5d..d4ce40c7c0a85 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java @@ -465,9 +465,9 @@ public class WifiTrackerTest { private void updateScoresAndWaitForAccessPointsChangedCallback() throws InterruptedException { // Updating scores can happen together or one after the other, so the latch countdown is set // to 2. - mAccessPointsChangedLatch = new CountDownLatch(3); + mAccessPointsChangedLatch = new CountDownLatch(2); updateScores(); - assertTrue("onAccessPointChanged was not called three times", + assertTrue("onAccessPointChanged was not called twice", mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); }