Merge "update "Last full charge" preference" into pi-dev

This commit is contained in:
Lei Yu
2018-03-20 00:33:29 +00:00
committed by Android (Google) Code Review
4 changed files with 53 additions and 28 deletions

View File

@@ -5135,6 +5135,8 @@
<string name="battery_detail_since_full_charge">Breakdown since last full charge</string> <string name="battery_detail_since_full_charge">Breakdown since last full charge</string>
<!-- Title for usage time since last full charge. [CHAR LIMIT=60] --> <!-- Title for usage time since last full charge. [CHAR LIMIT=60] -->
<string name="battery_last_full_charge">Last full charge</string> <string name="battery_last_full_charge">Last full charge</string>
<!-- Title for usage time that full charge lasts. [CHAR LIMIT=60] -->
<string name="battery_full_charge_last">Full charge lasts about</string>
<!-- Description for text in battery footer. [CHAR LIMIT=NONE] --> <!-- Description for text in battery footer. [CHAR LIMIT=NONE] -->
<string name="battery_footer_summary">Battery usage data is approximate and can change based on usage</string> <string name="battery_footer_summary">Battery usage data is approximate and can change based on usage</string>
<!-- Title for text that shows the amount of time an app has been running while in the foreground. [CHAR LIMIT=80] --> <!-- Title for text that shows the amount of time an app has been running while in the foreground. [CHAR LIMIT=80] -->

View File

@@ -422,32 +422,24 @@ public class BatteryUtils {
new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
final long elapsedRealtimeUs = PowerUtil.convertMsToUs( final long elapsedRealtimeUs = PowerUtil.convertMsToUs(
SystemClock.elapsedRealtime()); SystemClock.elapsedRealtime());
final BatteryStats stats = statsHelper.getStats();
BatteryInfo batteryInfo; BatteryInfo batteryInfo;
// 0 means we are discharging, anything else means charging final Estimate estimate;
final boolean discharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) // Get enhanced prediction if available
== 0; if (mPowerUsageFeatureProvider != null &&
// Get enhanced prediction if available and discharging, otherwise use the old code
Estimate estimate = null;
if (discharging && mPowerUsageFeatureProvider != null &&
mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) { mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) {
estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(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 { } else {
estimate = new Estimate( estimate = new Estimate(
PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)), PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)),
false, false /* isBasedOnUsage */,
Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
);
batteryInfo = BatteryInfo.getBatteryInfo(mContext, batteryBroadcast, stats,
estimate, elapsedRealtimeUs, false /* shortString */);
} }
BatteryUtils.logRuntime(tag, "BatteryInfoLoader post query", startTime);
batteryInfo = BatteryInfo.getBatteryInfo(mContext, batteryBroadcast, stats,
estimate, elapsedRealtimeUs, false /* shortString */);
BatteryUtils.logRuntime(tag, "BatteryInfoLoader.loadInBackground", startTime); BatteryUtils.logRuntime(tag, "BatteryInfoLoader.loadInBackground", startTime);
return batteryInfo; return batteryInfo;

View File

@@ -95,6 +95,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
BatteryUtils mBatteryUtils; BatteryUtils mBatteryUtils;
@VisibleForTesting @VisibleForTesting
LayoutPreference mBatteryLayoutPref; LayoutPreference mBatteryLayoutPref;
@VisibleForTesting
BatteryInfo mBatteryInfo;
/** /**
* SparseArray that maps uid to {@link Anomaly}, so we could find {@link Anomaly} by uid * 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 @Override
public void onLoadFinished(Loader<BatteryInfo> loader, BatteryInfo batteryInfo) { public void onLoadFinished(Loader<BatteryInfo> loader, BatteryInfo batteryInfo) {
mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo); mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo);
mBatteryInfo = batteryInfo;
updateLastFullChargePreference();
} }
@Override @Override
@@ -291,9 +295,7 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
// reload BatteryInfo and updateUI // reload BatteryInfo and updateUI
restartBatteryInfoLoader(); restartBatteryInfoLoader();
final long lastFullChargeTime = mBatteryUtils.calculateLastFullChargeTime(mStatsHelper, updateLastFullChargePreference();
System.currentTimeMillis());
updateLastFullChargePreference(lastFullChargeTime);
mScreenUsagePref.setSubtitle(StringUtil.formatElapsedTime(getContext(), mScreenUsagePref.setSubtitle(StringUtil.formatElapsedTime(getContext(),
mBatteryUtils.calculateScreenUsageTime(mStatsHelper), false)); mBatteryUtils.calculateScreenUsageTime(mStatsHelper), false));
} }
@@ -314,10 +316,21 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
} }
@VisibleForTesting @VisibleForTesting
void updateLastFullChargePreference(long timeMs) { void updateLastFullChargePreference() {
final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs, if (mBatteryInfo != null && mBatteryInfo.averageTimeToDischarge
false); != Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN) {
mLastFullChargePref.setSubtitle(timeSequence); 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 @VisibleForTesting

View File

@@ -123,6 +123,8 @@ public class PowerUsageSummaryTest {
private MenuInflater mMenuInflater; private MenuInflater mMenuInflater;
@Mock @Mock
private MenuItem mAdvancedPageMenu; private MenuItem mAdvancedPageMenu;
@Mock
private BatteryInfo mBatteryInfo;
private List<BatterySipper> mUsageList; private List<BatterySipper> mUsageList;
private Context mRealContext; private Context mRealContext;
@@ -185,12 +187,28 @@ public class PowerUsageSummaryTest {
} }
@Test @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); 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 @Test