Loading src/com/android/settings/fuelgauge/BatteryUtils.java +22 −9 Original line number Diff line number Diff line Loading @@ -55,6 +55,8 @@ import com.android.settingslib.utils.ThreadUtils; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.time.Duration; import java.time.Instant; import java.util.Collections; import java.util.Comparator; import java.util.List; Loading Loading @@ -450,16 +452,10 @@ public class BatteryUtils { SystemClock.elapsedRealtime()); final BatteryStats stats = statsHelper.getStats(); BatteryInfo batteryInfo; Estimate estimate = null; // Get enhanced prediction if available if (mPowerUsageFeatureProvider != null && mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) { estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext); } Estimate estimate = getEnhancedEstimate(); if (estimate != null) { Estimate.storeCachedEstimate(mContext, estimate); } else { // couldn't get estimate from cache or provider, use fallback if (estimate == null) { estimate = new Estimate( PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)), false /* isBasedOnUsage */, Loading @@ -474,6 +470,23 @@ public class BatteryUtils { return batteryInfo; } @VisibleForTesting Estimate getEnhancedEstimate() { Estimate estimate = null; // Get enhanced prediction if available if (Duration.between(Estimate.getLastCacheUpdateTime(mContext), Instant.now()) .compareTo(Duration.ofSeconds(10)) < 0) { estimate = Estimate.getCachedEstimateIfAvailable(mContext); } else if (mPowerUsageFeatureProvider != null && mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) { estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext); if (estimate != null) { Estimate.storeCachedEstimate(mContext, estimate); } } return estimate; } /** * Find the {@link BatterySipper} with the corresponding {@link BatterySipper.DrainType} */ Loading tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ import com.android.settings.fuelgauge.batterytip.AnomalyInfo; import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowThreadUtils; import com.android.settingslib.fuelgauge.Estimate; import com.android.settingslib.fuelgauge.PowerWhitelistBackend; import org.junit.Before; Loading Loading @@ -728,4 +729,17 @@ public class BatteryUtilsTest { //Should not crash assertThat(mBatteryUtils.getBatteryInfo(mBatteryStatsHelper, TAG)).isNotNull(); } @Test public void getEnhancedEstimate_doesNotUpdateCache_ifEstimateFresh() { Estimate estimate = new Estimate(1000, true, 1000); Estimate.storeCachedEstimate(mContext, estimate); estimate = mBatteryUtils.getEnhancedEstimate(); // only pass if estimate has not changed assertThat(estimate).isNotNull(); assertThat(estimate.isBasedOnUsage()).isTrue(); assertThat(estimate.getAverageDischargeTime()).isEqualTo(1000); } } Loading
src/com/android/settings/fuelgauge/BatteryUtils.java +22 −9 Original line number Diff line number Diff line Loading @@ -55,6 +55,8 @@ import com.android.settingslib.utils.ThreadUtils; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.time.Duration; import java.time.Instant; import java.util.Collections; import java.util.Comparator; import java.util.List; Loading Loading @@ -450,16 +452,10 @@ public class BatteryUtils { SystemClock.elapsedRealtime()); final BatteryStats stats = statsHelper.getStats(); BatteryInfo batteryInfo; Estimate estimate = null; // Get enhanced prediction if available if (mPowerUsageFeatureProvider != null && mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) { estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext); } Estimate estimate = getEnhancedEstimate(); if (estimate != null) { Estimate.storeCachedEstimate(mContext, estimate); } else { // couldn't get estimate from cache or provider, use fallback if (estimate == null) { estimate = new Estimate( PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)), false /* isBasedOnUsage */, Loading @@ -474,6 +470,23 @@ public class BatteryUtils { return batteryInfo; } @VisibleForTesting Estimate getEnhancedEstimate() { Estimate estimate = null; // Get enhanced prediction if available if (Duration.between(Estimate.getLastCacheUpdateTime(mContext), Instant.now()) .compareTo(Duration.ofSeconds(10)) < 0) { estimate = Estimate.getCachedEstimateIfAvailable(mContext); } else if (mPowerUsageFeatureProvider != null && mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) { estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext); if (estimate != null) { Estimate.storeCachedEstimate(mContext, estimate); } } return estimate; } /** * Find the {@link BatterySipper} with the corresponding {@link BatterySipper.DrainType} */ Loading
tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ import com.android.settings.fuelgauge.batterytip.AnomalyInfo; import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowThreadUtils; import com.android.settingslib.fuelgauge.Estimate; import com.android.settingslib.fuelgauge.PowerWhitelistBackend; import org.junit.Before; Loading Loading @@ -728,4 +729,17 @@ public class BatteryUtilsTest { //Should not crash assertThat(mBatteryUtils.getBatteryInfo(mBatteryStatsHelper, TAG)).isNotNull(); } @Test public void getEnhancedEstimate_doesNotUpdateCache_ifEstimateFresh() { Estimate estimate = new Estimate(1000, true, 1000); Estimate.storeCachedEstimate(mContext, estimate); estimate = mBatteryUtils.getEnhancedEstimate(); // only pass if estimate has not changed assertThat(estimate).isNotNull(); assertThat(estimate.isBasedOnUsage()).isTrue(); assertThat(estimate.getAverageDischargeTime()).isEqualTo(1000); } }