From 250a79830cd065602b99ec3d611da694ee294ea8 Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Wed, 24 Jan 2018 10:24:04 -0800 Subject: [PATCH] Fix null pointer from PowerUsageFeatureProvider Some locations did not check if the returned value was null before doing operations on them and could crash. This CL changes those spots to take that into account. Test: b/72463854 will add in follow up to unblock dogfood Bug: 72350595 Change-Id: I0ace5c0ab4a8aa9fd5b09d41d6f986143246f059 --- .../settings/fuelgauge/BatteryInfo.java | 24 ++++++++++--------- .../fuelgauge/DebugEstimatesLoader.java | 3 +++ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java index c4c795b29b1..63841307ed8 100644 --- a/src/com/android/settings/fuelgauge/BatteryInfo.java +++ b/src/com/android/settings/fuelgauge/BatteryInfo.java @@ -171,18 +171,20 @@ public class BatteryInfo { if (discharging && provider != null && provider.isEnhancedBatteryPredictionEnabled(context)) { Estimate estimate = provider.getEnhancedBatteryPrediction(context); - BatteryUtils.logRuntime(LOG_TAG, "time for enhanced BatteryInfo", startTime); - return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats, - elapsedRealtimeUs, shortString, - BatteryUtils.convertMsToUs(estimate.estimateMillis), - estimate.isBasedOnUsage); - } else { - long prediction = discharging - ? stats.computeBatteryTimeRemaining(elapsedRealtimeUs) : 0; - BatteryUtils.logRuntime(LOG_TAG, "time for regular BatteryInfo", startTime); - return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats, - elapsedRealtimeUs, shortString, prediction, false); + if(estimate != null) { + BatteryUtils + .logRuntime(LOG_TAG, "time for enhanced BatteryInfo", startTime); + return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats, + elapsedRealtimeUs, shortString, + BatteryUtils.convertMsToUs(estimate.estimateMillis), + estimate.isBasedOnUsage); + } } + long prediction = discharging + ? stats.computeBatteryTimeRemaining(elapsedRealtimeUs) : 0; + BatteryUtils.logRuntime(LOG_TAG, "time for regular BatteryInfo", startTime); + return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats, + elapsedRealtimeUs, shortString, prediction, false); } @Override diff --git a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java index a080e2b7300..e58ccd339a0 100644 --- a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java +++ b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java @@ -55,6 +55,9 @@ public class DebugEstimatesLoader extends AsyncLoader> { stats, elapsedRealtimeUs, false); Estimate estimate = powerUsageFeatureProvider.getEnhancedBatteryPrediction(context); + if (estimate == null) { + estimate = new Estimate(0, false); + } BatteryInfo newInfo = BatteryInfo.getBatteryInfo(getContext(), batteryBroadcast, stats, elapsedRealtimeUs, false, BatteryUtils.convertMsToUs(estimate.estimateMillis),