diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index b3770b55982..b39fcfc0d9b 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -166,7 +166,8 @@ public class PowerUsageSummary extends PowerUsageBase implements } }; - private LoaderManager.LoaderCallbacks mBatteryPredictionLoaderCallbacks = + @VisibleForTesting + LoaderManager.LoaderCallbacks mBatteryPredictionLoaderCallbacks = new LoaderManager.LoaderCallbacks() { @Override @@ -177,8 +178,11 @@ public class PowerUsageSummary extends PowerUsageBase implements @Override public void onLoadFinished(Loader loader, Cursor cursor) { + if (cursor == null) { + return; + } try { - if (cursor != null && cursor.moveToFirst()) { + if (cursor.moveToFirst()) { mEnhancedEstimate = mPowerFeatureProvider.getTimeRemainingEstimate(cursor); } @@ -746,7 +750,8 @@ public class PowerUsageSummary extends PowerUsageBase implements @VisibleForTesting void useEnhancedEstimateIfAvailable(Context context, BatteryInfo batteryInfo) { - if (mEnhancedEstimate > 0) { + if (mEnhancedEstimate > 0 + && mPowerFeatureProvider.isEnhancedBatteryPredictionEnabled(context)) { final Resources resources = context.getResources(); batteryInfo.remainingTimeUs = mEnhancedEstimate; String timeString = Formatter.formatShortElapsedTime(context, mEnhancedEstimate); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java index ca45b4bfca2..95e33bbd494 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java @@ -494,6 +494,7 @@ public class PowerUsageSummaryTest { // mock out the provider final long time = 60 * 1000 * 1000; PowerUsageFeatureProvider provider = mFeatureFactory.getPowerUsageFeatureProvider(mContext); + when(provider.isEnhancedBatteryPredictionEnabled(any())).thenReturn(true); mFragment.mPowerFeatureProvider = provider; mFragment.mEnhancedEstimate = time; @@ -505,6 +506,30 @@ public class PowerUsageSummaryTest { assertThat(mBatteryInfo.remainingLabel).contains("About 17 hrs"); } + @Test + public void testUseEnhancedEstimateIfAvailable_noOpsOnDisabled() { + // mock out the provider + final long time = 60 * 1000 * 1000; + PowerUsageFeatureProvider provider = mFeatureFactory.getPowerUsageFeatureProvider(mContext); + when(provider.isEnhancedBatteryPredictionEnabled(any())).thenReturn(false); + mFragment.mPowerFeatureProvider = provider; + mFragment.mEnhancedEstimate = time; + mBatteryInfo.remainingTimeUs = TIME_SINCE_LAST_FULL_CHARGE_US; + mBatteryInfo.remainingLabel = TIME_LEFT; + + mFragment.useEnhancedEstimateIfAvailable(mRealContext, mBatteryInfo); + + // check to make sure the values did not change + assertThat(mBatteryInfo.remainingTimeUs).isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_US); + assertThat(mBatteryInfo.remainingLabel).contains(TIME_LEFT); + } + + @Test + public void testBatteryPredictionLoaderCallbacks_DoesNotCrashOnNull() { + // Sanity test to check for crash + mFragment.mBatteryPredictionLoaderCallbacks.onLoadFinished(null, null); + } + @Test public void testInitAnomalyDetectionIfPossible_detectionEnabled_init() { when(mFeatureFactory.powerUsageFeatureProvider.isAnomalyDetectionEnabled()).thenReturn(