diff --git a/res/values/strings.xml b/res/values/strings.xml index 953480f89fa..2942fdd6df9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5131,6 +5131,8 @@ Breakdown since last full charge Last full charge + + Full charge lasts about Battery usage data is approximate and can change based on usage diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java index 3a84026e7c9..2b798557767 100644 --- a/src/com/android/settings/fuelgauge/BatteryUtils.java +++ b/src/com/android/settings/fuelgauge/BatteryUtils.java @@ -422,32 +422,24 @@ public class BatteryUtils { new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); final long elapsedRealtimeUs = PowerUtil.convertMsToUs( SystemClock.elapsedRealtime()); + final BatteryStats stats = statsHelper.getStats(); BatteryInfo batteryInfo; - // 0 means we are discharging, anything else means charging - final boolean discharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) - == 0; - // Get enhanced prediction if available and discharging, otherwise use the old code - Estimate estimate = null; - if (discharging && mPowerUsageFeatureProvider != null && + final Estimate estimate; + // Get enhanced prediction if available + if (mPowerUsageFeatureProvider != null && mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) { estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext); - } - final BatteryStats stats = statsHelper.getStats(); - BatteryUtils.logRuntime(tag, "BatteryInfoLoader post query", startTime); - - if (estimate != null) { - batteryInfo = BatteryInfo.getBatteryInfo(mContext, batteryBroadcast, stats, - estimate, elapsedRealtimeUs, false /* shortString */); } else { estimate = new Estimate( PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)), - false, - Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN - ); - batteryInfo = BatteryInfo.getBatteryInfo(mContext, batteryBroadcast, stats, - estimate, elapsedRealtimeUs, false /* shortString */); + false /* isBasedOnUsage */, + Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN); } + + BatteryUtils.logRuntime(tag, "BatteryInfoLoader post query", startTime); + batteryInfo = BatteryInfo.getBatteryInfo(mContext, batteryBroadcast, stats, + estimate, elapsedRealtimeUs, false /* shortString */); BatteryUtils.logRuntime(tag, "BatteryInfoLoader.loadInBackground", startTime); return batteryInfo; diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index b64dc526bad..825686829e9 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -95,6 +95,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList BatteryUtils mBatteryUtils; @VisibleForTesting LayoutPreference mBatteryLayoutPref; + @VisibleForTesting + BatteryInfo mBatteryInfo; /** * SparseArray that maps uid to {@link Anomaly}, so we could find {@link Anomaly} by uid @@ -118,6 +120,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList @Override public void onLoadFinished(Loader loader, BatteryInfo batteryInfo) { mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo); + mBatteryInfo = batteryInfo; + updateLastFullChargePreference(); } @Override @@ -291,9 +295,7 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList // reload BatteryInfo and updateUI restartBatteryInfoLoader(); - final long lastFullChargeTime = mBatteryUtils.calculateLastFullChargeTime(mStatsHelper, - System.currentTimeMillis()); - updateLastFullChargePreference(lastFullChargeTime); + updateLastFullChargePreference(); mScreenUsagePref.setSubtitle(StringUtil.formatElapsedTime(getContext(), mBatteryUtils.calculateScreenUsageTime(mStatsHelper), false)); } @@ -314,10 +316,21 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList } @VisibleForTesting - void updateLastFullChargePreference(long timeMs) { - final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs, - false); - mLastFullChargePref.setSubtitle(timeSequence); + void updateLastFullChargePreference() { + if (mBatteryInfo != null && mBatteryInfo.averageTimeToDischarge + != Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN) { + mLastFullChargePref.setTitle(R.string.battery_full_charge_last); + mLastFullChargePref.setSubtitle( + StringUtil.formatElapsedTime(getContext(), mBatteryInfo.averageTimeToDischarge, + false /* withSeconds */)); + } else { + final long lastFullChargeTime = mBatteryUtils.calculateLastFullChargeTime(mStatsHelper, + System.currentTimeMillis()); + mLastFullChargePref.setTitle(R.string.battery_last_full_charge); + mLastFullChargePref.setSubtitle( + StringUtil.formatRelativeTime(getContext(), lastFullChargeTime, + false /* withSeconds */)); + } } @VisibleForTesting diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java index 6176bef4544..24b789cd3e9 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java @@ -123,6 +123,8 @@ public class PowerUsageSummaryTest { private MenuInflater mMenuInflater; @Mock private MenuItem mAdvancedPageMenu; + @Mock + private BatteryInfo mBatteryInfo; private List mUsageList; private Context mRealContext; @@ -185,12 +187,28 @@ public class PowerUsageSummaryTest { } @Test - public void testUpdateLastFullChargePreference_showCorrectSummary() { + public void testUpdateLastFullChargePreference_noAverageTime_showLastFullChargeSummary() { + mFragment.mBatteryInfo = null; + when(mFragment.getContext()).thenReturn(mRealContext); + doReturn(TIME_SINCE_LAST_FULL_CHARGE_MS).when( + mFragment.mBatteryUtils).calculateLastFullChargeTime(any(), anyLong()); + + mFragment.updateLastFullChargePreference(); + + assertThat(mLastFullChargePref.getTitle()).isEqualTo("Last full charge"); + assertThat(mLastFullChargePref.getSubtitle()).isEqualTo("2 hr. ago"); + } + + @Test + public void testUpdateLastFullChargePreference_hasAverageTime_showFullChargeLastSummary() { + mFragment.mBatteryInfo = mBatteryInfo; + mBatteryInfo.averageTimeToDischarge = TIME_SINCE_LAST_FULL_CHARGE_MS; when(mFragment.getContext()).thenReturn(mRealContext); - mFragment.updateLastFullChargePreference(TIME_SINCE_LAST_FULL_CHARGE_MS); + mFragment.updateLastFullChargePreference(); - assertThat(mLastFullChargePref.getSubtitle()).isEqualTo("2 hr. ago"); + assertThat(mLastFullChargePref.getTitle()).isEqualTo("Full charge lasts about"); + assertThat(mLastFullChargePref.getSubtitle().toString()).isEqualTo("2h"); } @Test