From f98425c87454509f05790b008a1e54775150f2e3 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 (cherry picked from commit 250a79830cd065602b99ec3d611da694ee294ea8) --- .../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),