diff --git a/res/values/strings.xml b/res/values/strings.xml
index fe92ca29674..4b66afeaae6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6255,8 +6255,39 @@
Since full charge
Manage battery usage
+
^1 total • ^2 background for past 24 hr
+
+ ^1 total • ^2 background for ^3
+
+
+ Total less than a minute for past 24 hr
+
+ Total less than a minute for ^1
+
+
+ Background less than a minute for past 24 hr
+
+ Background less than a minute for ^1
+
+
+ ^1 total for past 24 hr
+
+ ^1 total for ^2
+
+
+ ^1 background for past 24 hr
+
+ ^1 background for ^2
+
+
+ ^1 total • background less than a minute for past 24 hr
+
+ ^1 total • background less than a minute for ^2
+
+
+ No usage for past 24 hr
Battery left estimate is based on your device usage
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 432224d537a..3ef7c455302 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -27,6 +27,7 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.text.Html;
import android.text.TextUtils;
+import android.text.format.DateUtils;
import android.util.Log;
import android.view.View;
@@ -282,20 +283,8 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);
- final long totalTimeMs = foregroundTimeMs + backgroundTimeMs;
- //TODO(b/178197718) Refine the layout
- controller.setSummary(TextUtils.expandTemplate(
- getText(R.string.battery_total_and_background_usage),
- StringUtil.formatElapsedTime(
- getContext(),
- totalTimeMs,
- /* withSeconds */ false,
- /* collapseTimeUnit */ false),
- StringUtil.formatElapsedTime(
- getContext(),
- backgroundTimeMs,
- /* withSeconds */ false,
- /* collapseTimeUnit */ false)));
+ //TODO(b/178197718) Update layout to support multiple lines
+ controller.setSummary(getAppActiveTime(foregroundTimeMs, backgroundTimeMs));
controller.done(context, true /* rebindActions */);
}
@@ -388,4 +377,53 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
private void updatePreferenceState(RadioButtonPreference preference, String selectedKey) {
preference.setChecked(selectedKey.equals(preference.getKey()));
}
+
+ //TODO(b/178197718) Update method to support time period
+ private CharSequence getAppActiveTime(long foregroundTimeMs, long backgroundTimeMs) {
+ final long totalTimeMs = foregroundTimeMs + backgroundTimeMs;
+ final CharSequence usageTimeSummary;
+
+ if (totalTimeMs == 0) {
+ usageTimeSummary = getText(R.string.battery_not_usage);
+ // Shows background summary only if we don't have foreground usage time.
+ } else if (foregroundTimeMs == 0 && backgroundTimeMs != 0) {
+ usageTimeSummary = backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS ?
+ getText(R.string.battery_background_usage_less_minute) :
+ TextUtils.expandTemplate(getText(R.string.battery_background_usage),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ backgroundTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false));
+ // Shows total usage summary only if total usage time is small.
+ } else if (totalTimeMs < DateUtils.MINUTE_IN_MILLIS) {
+ usageTimeSummary = getText(R.string.battery_total_usage_less_minute);
+ // Shows different total usage summary when background usage time is small.
+ } else if (backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS) {
+ usageTimeSummary = TextUtils.expandTemplate(
+ getText(backgroundTimeMs == 0 ?
+ R.string.battery_total_usage :
+ R.string.battery_total_usage_and_background_less_minute_usage),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ totalTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false));
+ // Shows default summary.
+ } else {
+ usageTimeSummary = TextUtils.expandTemplate(
+ getText(R.string.battery_total_and_background_usage),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ totalTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ backgroundTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false));
+ }
+ return usageTimeSummary;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index a288c3a84c2..dd10a9e1556 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -249,14 +249,122 @@ public class AdvancedPowerUsageDetailTest {
}
@Test
- public void testInitHeader_hasCorrectSummary() {
- mFragment.mAppEntry = null;
+ public void testInitHeader_noUsageTime_hasCorrectSummary() {
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, /* value */ 0);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, /* value */ 0);
+ when(mFragment.getArguments()).thenReturn(bundle);
+
mFragment.initHeader();
ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("0 min total • 0 min background for past 24 hr");
+ .isEqualTo("No usage for past 24 hr");
+ }
+
+ @Test
+ public void testInitHeader_backgroundTwoMinutesForegroundZero_hasCorrectSummary() {
+ final long backgroundTimeTwoMinutes = 120000;
+ final long foregroundTimeZero = 0;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeTwoMinutes);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeZero);
+ when(mFragment.getArguments()).thenReturn(bundle);
+
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("2 min background for past 24 hr");
+ }
+
+ @Test
+ public void testInitHeader_backgroundLessThanAMinutesForegroundZero_hasCorrectSummary() {
+ final long backgroundTimeLessThanAMinute = 59999;
+ final long foregroundTimeZero = 0;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(
+ AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeLessThanAMinute);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeZero);
+ when(mFragment.getArguments()).thenReturn(bundle);
+
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("Background less than a minute for past 24 hr");
+ }
+
+ @Test
+ public void testInitHeader_totalUsageLessThanAMinutes_hasCorrectSummary() {
+ final long backgroundTimeLessThanHalfMinute = 20000;
+ final long foregroundTimeLessThanHalfMinute = 20000;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(
+ AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeLessThanHalfMinute);
+ bundle.putLong(
+ AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeLessThanHalfMinute);
+ when(mFragment.getArguments()).thenReturn(bundle);
+
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("Total less than a minute for past 24 hr");
+ }
+
+ @Test
+ public void testInitHeader_TotalAMinutesBackgroundLessThanAMinutes_hasCorrectSummary() {
+ final long backgroundTimeZero = 59999;
+ final long foregroundTimeTwoMinutes = 1;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeZero);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeTwoMinutes);
+ when(mFragment.getArguments()).thenReturn(bundle);
+
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("1 min total • background less than a minute for past 24 hr");
+ }
+
+ @Test
+ public void testInitHeader_TotalAMinutesBackgroundZero_hasCorrectSummary() {
+ final long backgroundTimeZero = 0;
+ final long foregroundTimeAMinutes = 60000;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeZero);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeAMinutes);
+ when(mFragment.getArguments()).thenReturn(bundle);
+
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("1 min total for past 24 hr");
+ }
+
+ @Test
+ public void testInitHeader_foregroundTwoMinutesBackgroundFourMinutes_hasCorrectSummary() {
+ final long backgroundTimeFourMinute = 240000;
+ final long foregroundTimeTwoMinutes = 120000;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeFourMinute);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeTwoMinutes);
+ when(mFragment.getArguments()).thenReturn(bundle);
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("6 min total • 4 min background for past 24 hr");
}
@Test