diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8cad24e3765..a2119fb18f3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6325,38 +6325,52 @@
Manage battery usage
+
+ ^1 total • ^2 background\nfrom last full charge
- ^1 total • ^2 background\nfor past 24 hr
+ ^1 total • ^2 background\nfor past 24 hr
^1 total • ^2 background\nfor ^3
-
- Total less than a minute for past 24 hr
+
+ Total less than a minute from last full charge
+
+ 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 from last full charge
+
+ Background less than a minute for past 24 hr
Background less than a minute for ^1
+
+ ^1 total from last full charge
- ^1 total for past 24 hr
+ ^1 total for past 24 hr
^1 total for ^2
+
+ ^1 background from last full charge
- ^1 background for past 24 hr
+ ^1 background for past 24 hr
^1 background for ^2
+
+ ^1 total • background less than a minute\nfrom last full charge
- ^1 total • background less than a minute\nfor past 24 hr
+ ^1 total • background less than a minute\nfor past 24 hr
^1 total • background less than a minute\nfor ^2
+
+ No usage from last full charge
- No usage for past 24 hr
+ 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 7c2f0523115..2b8328842e9 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -44,6 +44,7 @@ import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
@@ -436,13 +437,18 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
long foregroundTimeMs, long backgroundTimeMs, String slotTime) {
final long totalTimeMs = foregroundTimeMs + backgroundTimeMs;
final CharSequence usageTimeSummary;
+ final PowerUsageFeatureProvider powerFeatureProvider =
+ FeatureFactory.getFactory(getContext()).getPowerUsageFeatureProvider(getContext());
if (totalTimeMs == 0) {
- usageTimeSummary = getText(R.string.battery_not_usage);
+ usageTimeSummary = getText(powerFeatureProvider.isChartGraphEnabled(getContext())
+ ? R.string.battery_not_usage_24hr : R.string.battery_not_usage);
} else if (slotTime == null) {
- // Shows summary text with past 24 hr if slot time is null.
- usageTimeSummary =
- getAppPast24HrActiveSummary(foregroundTimeMs, backgroundTimeMs, totalTimeMs);
+ // Shows summary text with past 24 hr or full charge if slot time is null.
+ usageTimeSummary = powerFeatureProvider.isChartGraphEnabled(getContext())
+ ? getAppPast24HrActiveSummary(foregroundTimeMs, backgroundTimeMs, totalTimeMs)
+ : getAppFullChargeActiveSummary(
+ foregroundTimeMs, backgroundTimeMs, totalTimeMs);
} else {
// Shows summary text with slot time.
usageTimeSummary = getAppActiveSummaryWithSlotTime(
@@ -451,7 +457,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
return usageTimeSummary;
}
- private CharSequence getAppPast24HrActiveSummary(
+ private CharSequence getAppFullChargeActiveSummary(
long foregroundTimeMs, long backgroundTimeMs, long totalTimeMs) {
// Shows background summary only if we don't have foreground usage time.
if (foregroundTimeMs == 0 && backgroundTimeMs != 0) {
@@ -494,6 +500,49 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
}
}
+ private CharSequence getAppPast24HrActiveSummary(
+ long foregroundTimeMs, long backgroundTimeMs, long totalTimeMs) {
+ // Shows background summary only if we don't have foreground usage time.
+ if (foregroundTimeMs == 0 && backgroundTimeMs != 0) {
+ return backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS
+ ? getText(R.string.battery_bg_usage_less_minute_24hr)
+ : TextUtils.expandTemplate(getText(R.string.battery_bg_usage_24hr),
+ 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) {
+ return getText(R.string.battery_total_usage_less_minute_24hr);
+ // Shows different total usage summary when background usage time is small.
+ } else if (backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS) {
+ return TextUtils.expandTemplate(
+ getText(backgroundTimeMs == 0
+ ? R.string.battery_total_usage_24hr
+ : R.string.battery_total_usage_and_bg_less_minute_usage_24hr),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ totalTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false));
+ // Shows default summary.
+ } else {
+ return TextUtils.expandTemplate(
+ getText(R.string.battery_total_and_bg_usage_24hr),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ totalTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ backgroundTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false));
+ }
+ }
+
private CharSequence getAppActiveSummaryWithSlotTime(
long foregroundTimeMs, long backgroundTimeMs, long totalTimeMs, String slotTime) {
// Shows background summary only if we don't have foreground usage time.
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 00c71dff8f2..e5ca4e3f8be 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -128,6 +128,7 @@ public class AdvancedPowerUsageDetailTest {
private RadioButtonPreference mUnrestrictedPreference;
private AdvancedPowerUsageDetail mFragment;
private SettingsActivity mTestActivity;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
@@ -135,7 +136,7 @@ public class AdvancedPowerUsageDetailTest {
mContext = spy(RuntimeEnvironment.application);
when(mContext.getPackageName()).thenReturn("foo");
- FakeFeatureFactory.setupForTest();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mFragment = spy(new AdvancedPowerUsageDetail());
doReturn(mContext).when(mFragment).getContext();
@@ -144,6 +145,8 @@ public class AdvancedPowerUsageDetailTest {
doReturn(APP_LABEL).when(mBundle).getString(nullable(String.class));
when(mFragment.getArguments()).thenReturn(mBundle);
doReturn(mLoaderManager).when(mFragment).getLoaderManager();
+ when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
+ .thenReturn(true);
ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
doReturn(mEntityHeaderController).when(mEntityHeaderController)
@@ -269,6 +272,144 @@ public class AdvancedPowerUsageDetailTest {
verify(mEntityHeaderController).setIsInstantApp(true);
}
+ @Test
+ public void testInitHeader_noUsageTimeAndGraphDisabled_hasCorrectSummary() {
+ when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
+ .thenReturn(false);
+
+ 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("No usage from last full charge");
+ }
+
+ @Test
+ public void testInitHeader_bgTwoMinFgZeroAndGraphDisabled_hasCorrectSummary() {
+ when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
+ .thenReturn(false);
+
+ 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 from last full charge");
+ }
+
+ @Test
+ public void testInitHeader_bgLessThanAMinFgZeroAndGraphDisabled_hasCorrectSummary() {
+ when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
+ .thenReturn(false);
+
+ 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 from last full charge");
+ }
+
+ @Test
+ public void testInitHeader_totalUsageLessThanAMinAndGraphDisabled_hasCorrectSummary() {
+ when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
+ .thenReturn(false);
+
+ 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 from last full charge");
+ }
+
+ @Test
+ public void testInitHeader_TotalAMinutesBgLessThanAMinAndGraphDisabled_hasCorrectSummary() {
+ when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
+ .thenReturn(false);
+
+ 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\nfrom last full charge");
+ }
+
+ @Test
+ public void testInitHeader_TotalAMinBackgroundZeroAndGraphDisabled_hasCorrectSummary() {
+ when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
+ .thenReturn(false);
+ 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 from last full charge");
+ }
+
+ @Test
+ public void testInitHeader_fgTwoMinBgFourMinAndGraphDisabled_hasCorrectSummary() {
+ when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
+ .thenReturn(false);
+ 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\nfrom last full charge");
+ }
+
@Test
public void testInitHeader_noUsageTime_hasCorrectSummary() {
Bundle bundle = new Bundle(2);
@@ -352,7 +493,7 @@ public class AdvancedPowerUsageDetailTest {
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");
+ .isEqualTo("1 min total • background less than a minute\nfor past 24 hr");
}
@Test
@@ -385,7 +526,7 @@ public class AdvancedPowerUsageDetailTest {
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");
+ .isEqualTo("6 min total • 4 min background\nfor past 24 hr");
}
@Test
@@ -423,7 +564,7 @@ public class AdvancedPowerUsageDetailTest {
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 12 am-2 am");
+ .isEqualTo("1 min total • background less than a minute\nfor 12 am-2 am");
}
@Test
@@ -458,7 +599,7 @@ public class AdvancedPowerUsageDetailTest {
ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("6 min total • 4 min background for 12 am-2 am");
+ .isEqualTo("6 min total • 4 min background\nfor 12 am-2 am");
}
@Test