From c5f5b18b226a208ec1b669b2b5269400b9ddccf9 Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Fri, 6 Apr 2018 14:50:05 -0700 Subject: [PATCH] Add NullPtrCheck when smearing in settings 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 | 5 +++++ .../android/settings/fuelgauge/BatteryUtilsTest.java | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java index 3c493b9eb65..e8668d1a93a 100644 --- a/src/com/android/settings/fuelgauge/BatteryUtils.java +++ b/src/com/android/settings/fuelgauge/BatteryUtils.java @@ -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); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java index 8b1076d8634..e05ff52246f 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java @@ -376,6 +376,18 @@ public class BatteryUtilsTest { BATTERY_APP_USAGE + BATTERY_SCREEN_USAGE / 2); } + @Test + public void testSmearScreenBatterySipper_screenSipperNull_shouldNotCrash() { + final BatterySipper sipperFg = createTestSmearBatterySipper(TIME_FOREGROUND, + BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */); + + final List sippers = new ArrayList<>(); + sippers.add(sipperFg); + + // Shouldn't crash + mBatteryUtils.smearScreenBatterySipper(sippers, null /* screenSipper */); + } + @Test public void testCalculateRunningTimeBasedOnStatsType() { assertThat(mBatteryUtils.calculateRunningTimeBasedOnStatsType(mBatteryStatsHelper,