OSDN Git Service

Add NullPtrCheck when smearing in settings
authorLei Yu <jackqdyulei@google.com>
Fri, 6 Apr 2018 21:50:05 +0000 (14:50 -0700)
committerLei Yu <jackqdyulei@google.com>
Fri, 6 Apr 2018 22:57:44 +0000 (15:57 -0700)
This only happens in new device with broken power_profile.xml, in
which it doesn't have screen power model.

This CL catches the null pointer crash and log it.

Change-Id: Iac23e3a8fc51385bdb22979c4b59000319f6fd49
Fixes: 74617269
Test: RunSettingsRoboTests

src/com/android/settings/fuelgauge/BatteryUtils.java
tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java

index 3c493b9..e8668d1 100644 (file)
@@ -214,6 +214,11 @@ public class BatteryUtils {
         }
 
         if (totalActivityTimeMs >= 10 * DateUtils.MINUTE_IN_MILLIS) {
+            if (screenSipper == null) {
+                Log.e(TAG, "screen sipper is null even when app screen time is not zero");
+                return;
+            }
+
             final double screenPowerMah = screenSipper.totalPowerMah;
             for (int i = 0, size = sippers.size(); i < size; i++) {
                 final BatterySipper sipper = sippers.get(i);
index 8b1076d..e05ff52 100644 (file)
@@ -377,6 +377,18 @@ public class BatteryUtilsTest {
     }
 
     @Test
+    public void testSmearScreenBatterySipper_screenSipperNull_shouldNotCrash() {
+        final BatterySipper sipperFg = createTestSmearBatterySipper(TIME_FOREGROUND,
+                BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */);
+
+        final List<BatterySipper> sippers = new ArrayList<>();
+        sippers.add(sipperFg);
+
+        // Shouldn't crash
+        mBatteryUtils.smearScreenBatterySipper(sippers, null /* screenSipper */);
+    }
+
+    @Test
     public void testCalculateRunningTimeBasedOnStatsType() {
         assertThat(mBatteryUtils.calculateRunningTimeBasedOnStatsType(mBatteryStatsHelper,
                 BatteryStats.STATS_SINCE_CHARGED)).isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_MS);