diff --git a/res/values/strings.xml b/res/values/strings.xml index bc5de68e965..fefbebcb63f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5178,10 +5178,14 @@ Total: less than a min Background: less than a min + + Screen time: less than a min Total: %s Background: %s + + Screen time: %s Battery usage data will be available in a few hours once fully charged diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java index 10cfd39fb9d..785c96ebe99 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownController.java @@ -291,44 +291,43 @@ public class BatteryUsageBreakdownController extends BasePreferenceController @VisibleForTesting void setPreferenceSummary( PowerGaugePreference preference, BatteryDiffEntry entry) { + final long screenOnTimeInMs = entry.mScreenOnTimeInMs; final long foregroundUsageTimeInMs = entry.mForegroundUsageTimeInMs; final long backgroundUsageTimeInMs = entry.mBackgroundUsageTimeInMs; final long totalUsageTimeInMs = foregroundUsageTimeInMs + backgroundUsageTimeInMs; - String usageTimeSummary = null; - // Not shows summary for some system components without usage time. - if (totalUsageTimeInMs == 0) { - preference.setSummary(null); - // Shows background summary only if we don't have foreground usage time. - } else if (foregroundUsageTimeInMs == 0 && backgroundUsageTimeInMs != 0) { - usageTimeSummary = buildUsageTimeInfo(backgroundUsageTimeInMs, true); - // Shows total usage summary only if total usage time is small. - } else if (totalUsageTimeInMs < DateUtils.MINUTE_IN_MILLIS) { - usageTimeSummary = buildUsageTimeInfo(totalUsageTimeInMs, false); + + StringBuilder usageTimeSummary = new StringBuilder(); + if (entry.isSystemEntry()) { + if (totalUsageTimeInMs != 0) { + usageTimeSummary.append(buildUsageTimeInfo(totalUsageTimeInMs, + R.string.battery_usage_total_less_than_one_minute, + R.string.battery_usage_for_total_time)); + } } else { - usageTimeSummary = buildUsageTimeInfo(totalUsageTimeInMs, false); - // Shows background usage time if it is larger than a minute. - if (backgroundUsageTimeInMs > 0) { - usageTimeSummary += - "\n" + buildUsageTimeInfo(backgroundUsageTimeInMs, true); + if (screenOnTimeInMs != 0) { + usageTimeSummary.append(buildUsageTimeInfo(screenOnTimeInMs, + R.string.battery_usage_screen_time_less_than_one_minute, + R.string.battery_usage_screen_time)); + } + if (screenOnTimeInMs != 0 && backgroundUsageTimeInMs != 0) { + usageTimeSummary.append('\n'); + } + if (backgroundUsageTimeInMs != 0) { + usageTimeSummary.append(buildUsageTimeInfo(backgroundUsageTimeInMs, + R.string.battery_usage_background_less_than_one_minute, + R.string.battery_usage_for_background_time)); } } preference.setSummary(usageTimeSummary); } - private String buildUsageTimeInfo(long usageTimeInMs, boolean isBackground) { - if (usageTimeInMs < DateUtils.MINUTE_IN_MILLIS) { - return mPrefContext.getString( - isBackground - ? R.string.battery_usage_background_less_than_one_minute - : R.string.battery_usage_total_less_than_one_minute); + private String buildUsageTimeInfo(long timeInMs, int lessThanOneMinuteResId, int normalResId) { + if (timeInMs < DateUtils.MINUTE_IN_MILLIS) { + return mPrefContext.getString(lessThanOneMinuteResId); } final CharSequence timeSequence = - StringUtil.formatElapsedTime(mPrefContext, (double) usageTimeInMs, + StringUtil.formatElapsedTime(mPrefContext, (double) timeInMs, /*withSeconds=*/ false, /*collapseTimeUnit=*/ false); - final int resourceId = - isBackground - ? R.string.battery_usage_for_background_time - : R.string.battery_usage_for_total_time; - return mPrefContext.getString(resourceId, timeSequence); + return mPrefContext.getString(normalResId, timeSequence); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java index e5afcc241f9..ba7650cda36 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java @@ -25,6 +25,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import android.app.settings.SettingsEnums; +import android.content.ContentValues; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; @@ -235,73 +236,117 @@ public final class BatteryUsageBreakdownControllerTest { } @Test - public void setPreferenceSummary_setNullContentIfTotalUsageTimeIsZero() { + public void setPreferenceSummary_systemEntryTotalUsageTimeIsZero_emptySummary() { final PowerGaugePreference pref = new PowerGaugePreference(mContext); pref.setSummary(PREF_SUMMARY); mBatteryUsageBreakdownController.setPreferenceSummary( pref, createBatteryDiffEntry( + /*isSystem=*/ true, + /*screenOnTimeInMs=*/ 0, /*foregroundUsageTimeInMs=*/ 0, /*backgroundUsageTimeInMs=*/ 0)); - assertThat(pref.getSummary()).isNull(); + assertThat(pref.getSummary().toString().isEmpty()).isTrue(); } @Test - public void setPreferenceSummary_setBackgroundUsageTimeOnly() { + public void setPreferenceSummary_systemEntryTotalUsageTimeLessThanAMinute_expectedSummary() { final PowerGaugePreference pref = new PowerGaugePreference(mContext); pref.setSummary(PREF_SUMMARY); mBatteryUsageBreakdownController.setPreferenceSummary( pref, createBatteryDiffEntry( + /*isSystem=*/ true, + /*screenOnTimeInMs=*/ 0, + /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS - 1, + /*backgroundUsageTimeInMs=*/ 0)); + assertThat(pref.getSummary().toString()).isEqualTo("Total: less than a min"); + } + + @Test + public void setPreferenceSummary_systemEntryTotalUsageTimeGreaterThanAMinute_expectedSummary() { + final PowerGaugePreference pref = new PowerGaugePreference(mContext); + pref.setSummary(PREF_SUMMARY); + + mBatteryUsageBreakdownController.setPreferenceSummary( + pref, createBatteryDiffEntry( + /*isSystem=*/ true, + /*screenOnTimeInMs=*/ 0, + /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS * 2, + /*backgroundUsageTimeInMs=*/ 0)); + assertThat(pref.getSummary().toString()).isEqualTo("Total: 2 min"); + } + + @Test + public void setPreferenceSummary_appEntryAllTimesAreZero_emptySummary() { + final PowerGaugePreference pref = new PowerGaugePreference(mContext); + pref.setSummary(PREF_SUMMARY); + + mBatteryUsageBreakdownController.setPreferenceSummary( + pref, createBatteryDiffEntry( + /*isSystem=*/ false, + /*screenOnTimeInMs=*/ 0, + /*foregroundUsageTimeInMs=*/ 0, + /*backgroundUsageTimeInMs=*/ 0)); + assertThat(pref.getSummary().toString().isEmpty()).isTrue(); + } + + @Test + public void setPreferenceSummary_appEntryBackgroundUsageTimeOnly_expectedSummary() { + final PowerGaugePreference pref = new PowerGaugePreference(mContext); + pref.setSummary(PREF_SUMMARY); + + mBatteryUsageBreakdownController.setPreferenceSummary( + pref, createBatteryDiffEntry( + /*isSystem=*/ false, + /*screenOnTimeInMs=*/ 0, /*foregroundUsageTimeInMs=*/ 0, /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS)); assertThat(pref.getSummary().toString()).isEqualTo("Background: 1 min"); } @Test - public void setPreferenceSummary_setTotalUsageTimeLessThanAMinute() { + public void setPreferenceSummary_appEntryScreenOnTimeOnly_expectedSummary() { final PowerGaugePreference pref = new PowerGaugePreference(mContext); pref.setSummary(PREF_SUMMARY); mBatteryUsageBreakdownController.setPreferenceSummary( pref, createBatteryDiffEntry( - /*foregroundUsageTimeInMs=*/ 100, - /*backgroundUsageTimeInMs=*/ 200)); - assertThat(pref.getSummary().toString()).isEqualTo("Total: less than a min"); + /*isSystem=*/ false, + /*screenOnTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS, + /*foregroundUsageTimeInMs=*/ 0, + /*backgroundUsageTimeInMs=*/ 0)); + assertThat(pref.getSummary().toString()).isEqualTo("Screen time: 1 min"); } @Test - public void setPreferenceSummary_setTotalTimeIfBackgroundTimeLessThanAMinute() { + public void setPreferenceSummary_appEntryAllTimesLessThanAMinute_expectedSummary() { final PowerGaugePreference pref = new PowerGaugePreference(mContext); pref.setSummary(PREF_SUMMARY); mBatteryUsageBreakdownController.setPreferenceSummary( pref, createBatteryDiffEntry( - /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS, - /*backgroundUsageTimeInMs=*/ 200)); - assertThat(pref.getSummary().toString()) - .isEqualTo("Total: 1 min\nBackground: less than a min"); + /*isSystem=*/ false, + /*screenOnTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS - 1, + /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS - 1, + /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS - 1)); + assertThat(pref.getSummary().toString()).isEqualTo( + "Screen time: less than a min\nBackground: less than a min"); } - @Test - public void setPreferenceSummary_setTotalAndBackgroundUsageTime() { - final PowerGaugePreference pref = new PowerGaugePreference(mContext); - pref.setSummary(PREF_SUMMARY); - - mBatteryUsageBreakdownController.setPreferenceSummary( - pref, createBatteryDiffEntry( - /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS, - /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS)); - assertThat(pref.getSummary().toString()).isEqualTo("Total: 2 min\nBackground: 1 min"); - } - - private BatteryDiffEntry createBatteryDiffEntry( + private BatteryDiffEntry createBatteryDiffEntry(boolean isSystem, long screenOnTimeInMs, long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) { + final ContentValues contentValues = new ContentValues(); + contentValues.put(BatteryHistEntry.KEY_CONSUMER_TYPE, Integer.valueOf( + isSystem ? ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY + : ConvertUtils.CONSUMER_TYPE_UID_BATTERY)); + contentValues.put(BatteryHistEntry.KEY_USER_ID, Integer.valueOf(1001)); + final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(contentValues); return new BatteryDiffEntry( - mContext, foregroundUsageTimeInMs, backgroundUsageTimeInMs, /*screenOnTimeInMs=*/ 0, + mContext, foregroundUsageTimeInMs, backgroundUsageTimeInMs, screenOnTimeInMs, /*consumePower=*/ 0, /*foregroundUsageConsumePower=*/ 0, /*foregroundServiceUsageConsumePower=*/ 0, /*backgroundUsageConsumePower=*/ 0, - /*cachedUsageConsumePower=*/ 0, mBatteryHistEntry); + /*cachedUsageConsumePower=*/ 0, batteryHistEntry); } private BatteryUsageBreakdownController createController() {