Loading res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -5135,6 +5135,8 @@ <string name="battery_detail_since_full_charge">Breakdown since last full charge</string> <!-- Title for usage time since last full charge. [CHAR LIMIT=60] --> <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] --> <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] --> Loading src/com/android/settings/fuelgauge/BatteryUtils.java +10 −18 Original line number Diff line number Diff line Loading @@ -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 ); 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; Loading src/com/android/settings/fuelgauge/PowerUsageSummary.java +20 −7 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -118,6 +120,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList @Override public void onLoadFinished(Loader<BatteryInfo> loader, BatteryInfo batteryInfo) { mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo); mBatteryInfo = batteryInfo; updateLastFullChargePreference(); } @Override Loading Loading @@ -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)); } Loading @@ -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 Loading tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +20 −2 Original line number Diff line number Diff line Loading @@ -123,6 +123,8 @@ public class PowerUsageSummaryTest { private MenuInflater mMenuInflater; @Mock private MenuItem mAdvancedPageMenu; @Mock private BatteryInfo mBatteryInfo; private List<BatterySipper> mUsageList; private Context mRealContext; Loading Loading @@ -185,14 +187,30 @@ 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(TIME_SINCE_LAST_FULL_CHARGE_MS); 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(); assertThat(mLastFullChargePref.getTitle()).isEqualTo("Full charge lasts about"); assertThat(mLastFullChargePref.getSubtitle().toString()).isEqualTo("2h"); } @Test public void testNonIndexableKeys_MatchPreferenceKeys() { final Context context = RuntimeEnvironment.application; Loading Loading
res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -5135,6 +5135,8 @@ <string name="battery_detail_since_full_charge">Breakdown since last full charge</string> <!-- Title for usage time since last full charge. [CHAR LIMIT=60] --> <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] --> <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] --> Loading
src/com/android/settings/fuelgauge/BatteryUtils.java +10 −18 Original line number Diff line number Diff line Loading @@ -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 ); 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; Loading
src/com/android/settings/fuelgauge/PowerUsageSummary.java +20 −7 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -118,6 +120,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList @Override public void onLoadFinished(Loader<BatteryInfo> loader, BatteryInfo batteryInfo) { mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo); mBatteryInfo = batteryInfo; updateLastFullChargePreference(); } @Override Loading Loading @@ -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)); } Loading @@ -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 Loading
tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +20 −2 Original line number Diff line number Diff line Loading @@ -123,6 +123,8 @@ public class PowerUsageSummaryTest { private MenuInflater mMenuInflater; @Mock private MenuItem mAdvancedPageMenu; @Mock private BatteryInfo mBatteryInfo; private List<BatterySipper> mUsageList; private Context mRealContext; Loading Loading @@ -185,14 +187,30 @@ 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(TIME_SINCE_LAST_FULL_CHARGE_MS); 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(); assertThat(mLastFullChargePref.getTitle()).isEqualTo("Full charge lasts about"); assertThat(mLastFullChargePref.getSubtitle().toString()).isEqualTo("2h"); } @Test public void testNonIndexableKeys_MatchPreferenceKeys() { final Context context = RuntimeEnvironment.application; Loading