Avoid null pointer when in getAmbientBrightnessStats
Check whether the tracker has been started before
trying to return stats.
Add unit test to check empty lists are returned
rather than null.
Bug: 76008231
Test: atest BrightnessTrackerTest
Change-Id: Icc7ef0ee43a95eb182cb1b0b9452f122363e67ba
diff --git a/services/core/java/com/android/server/display/BrightnessTracker.java b/services/core/java/com/android/server/display/BrightnessTracker.java
index 88df195..905c7e3 100644
--- a/services/core/java/com/android/server/display/BrightnessTracker.java
+++ b/services/core/java/com/android/server/display/BrightnessTracker.java
@@ -686,10 +686,15 @@
}
public ParceledListSlice<AmbientBrightnessDayStats> getAmbientBrightnessStats(int userId) {
- ArrayList<AmbientBrightnessDayStats> stats = mAmbientBrightnessStatsTracker.getUserStats(
- userId);
- return (stats != null) ? new ParceledListSlice<>(stats) : new ParceledListSlice<>(
- Collections.EMPTY_LIST);
+ if (mAmbientBrightnessStatsTracker != null) {
+ ArrayList<AmbientBrightnessDayStats> stats =
+ mAmbientBrightnessStatsTracker.getUserStats(
+ userId);
+ if (stats != null) {
+ return new ParceledListSlice<>(stats);
+ }
+ }
+ return ParceledListSlice.emptyList();
}
// Not allowed to keep the SensorEvent so used to copy the data we care about.
diff --git a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java
index 92cc537..45bee6e 100644
--- a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java
@@ -30,9 +30,11 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.ParceledListSlice;
import android.database.ContentObserver;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
+import android.hardware.display.AmbientBrightnessDayStats;
import android.hardware.display.BrightnessChangeEvent;
import android.os.BatteryManager;
import android.os.Handler;
@@ -571,6 +573,19 @@
assertEquals(event.batteryLevel, event2.batteryLevel, FLOAT_DELTA);
}
+ @Test
+ public void testNonNullAmbientStats() {
+ // getAmbientBrightnessStats should return an empty list rather than null when
+ // tracker isn't started or hasn't collected any data.
+ ParceledListSlice<AmbientBrightnessDayStats> slice = mTracker.getAmbientBrightnessStats(0);
+ assertNotNull(slice);
+ assertTrue(slice.getList().isEmpty());
+ startTracker(mTracker);
+ slice = mTracker.getAmbientBrightnessStats(0);
+ assertNotNull(slice);
+ assertTrue(slice.getList().isEmpty());
+ }
+
private InputStream getInputStream(String data) {
return new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));
}