From 2cc7431fa34e9f3812885f221280be00a4ce0073 Mon Sep 17 00:00:00 2001 From: "Wesley.CW Wang" Date: Wed, 21 Apr 2021 20:13:55 +0800 Subject: [PATCH] Update app usage page active time format - Make the text of active time support different states like foreground or background usage time less than one minutes Bug: 178197718 Test: make SettingsRoboTests Change-Id: I20be88e5b23a679c15f97bac4b9d400557685463 --- res/values/strings.xml | 31 +++++ .../fuelgauge/AdvancedPowerUsageDetail.java | 66 +++++++--- .../AdvancedPowerUsageDetailTest.java | 114 +++++++++++++++++- 3 files changed, 194 insertions(+), 17 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 1ca471f3af6..cf712e07a26 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