From 8b148924de753fca9317f1b91795ad11b630be5b Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Fri, 16 Mar 2018 15:26:33 -0700 Subject: [PATCH] update "Last full charge" preference When there is average time estimation, change it to "Full charge lasts about" and also update the time. Also update the BatteryInfo to return average time estimation even though it is charging. Bug: 73018395 Test: RunSettingsRoboTests Change-Id: Ib22dadb5716e3034c60aeeb7768fdbf0cc86be0c --- res/values/strings.xml | 2 ++ .../settings/fuelgauge/BatteryUtils.java | 28 +++++++------------ .../settings/fuelgauge/PowerUsageSummary.java | 27 +++++++++++++----- .../fuelgauge/PowerUsageSummaryTest.java | 24 ++++++++++++++-- 4 files changed, 53 insertions(+), 28 deletions(-) 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