diff --git a/res/values/strings.xml b/res/values/strings.xml index 22f6c91a988..7572ca4578b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6322,9 +6322,9 @@ Manage battery usage - ^1 total • ^2 background for past 24 hr + ^1 total • ^2 background for past 24 hr - ^1 total • ^2 background for ^3 + ^1 total • ^2 background for ^3 Total less than a minute for past 24 hr @@ -6332,9 +6332,9 @@ Total less than a minute for ^1 - Background less than a minute for past 24 hr + Background less than a minute for past 24 hr - Background less than a minute for ^1 + Background less than a minute for ^1 ^1 total for past 24 hr @@ -6342,14 +6342,14 @@ ^1 total for ^2 - ^1 background for past 24 hr + ^1 background for past 24 hr - ^1 background for ^2 + ^1 background for ^2 - ^1 total • background less than a minute for past 24 hr + ^1 total • background less than a minute for past 24 hr - ^1 total • background less than a minute for ^2 + ^1 total • background less than a minute for ^2 No usage for past 24 hr diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index 4dbde251276..21160d70cf4 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -70,6 +70,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements public static final String EXTRA_PACKAGE_NAME = "extra_package_name"; public static final String EXTRA_FOREGROUND_TIME = "extra_foreground_time"; public static final String EXTRA_BACKGROUND_TIME = "extra_background_time"; + public static final String EXTRA_SLOT_TIME = "extra_slot_time"; public static final String EXTRA_LABEL = "extra_label"; public static final String EXTRA_ICON_ID = "extra_icon_id"; public static final String EXTRA_POWER_USAGE_PERCENT = "extra_power_usage_percent"; @@ -184,6 +185,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements args.putInt(EXTRA_UID, launchArgs.mUid); args.putLong(EXTRA_BACKGROUND_TIME, launchArgs.mBackgroundTimeMs); args.putLong(EXTRA_FOREGROUND_TIME, launchArgs.mForegroundTimeMs); + args.putString(EXTRA_SLOT_TIME, launchArgs.mSlotInformation); args.putString(EXTRA_POWER_USAGE_PERCENT, launchArgs.mUsagePercent); args.putInt(EXTRA_POWER_USAGE_AMOUNT, launchArgs.mConsumedPower); final int userId = launchArgs.mIsUserEntry ? ActivityManager.getCurrentUser() @@ -294,8 +296,9 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements if (enableTriState) { final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME); final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME); + final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null); //TODO(b/178197718) Update layout to support multiple lines - controller.setSummary(getAppActiveTime(foregroundTimeMs, backgroundTimeMs)); + controller.setSummary(getAppActiveTime(foregroundTimeMs, backgroundTimeMs, slotTime)); } controller.done(context, true /* rebindActions */); @@ -430,32 +433,46 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements getContext(), getArguments().getInt(EXTRA_UID), packageName); } - //TODO(b/178197718) Update method to support time period - private CharSequence getAppActiveTime(long foregroundTimeMs, long backgroundTimeMs) { + private CharSequence getAppActiveTime( + long foregroundTimeMs, long backgroundTimeMs, String slotTime) { final long totalTimeMs = foregroundTimeMs + backgroundTimeMs; final CharSequence usageTimeSummary; if (totalTimeMs == 0) { usageTimeSummary = getText(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); + } else { + // Shows summary text with slot time. + usageTimeSummary = getAppActiveSummaryWithSlotTime( + foregroundTimeMs, backgroundTimeMs, totalTimeMs, slotTime); + } + return usageTimeSummary; + } + + private CharSequence getAppPast24HrActiveSummary( + long foregroundTimeMs, long backgroundTimeMs, long totalTimeMs) { // 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)); + if (foregroundTimeMs == 0 && backgroundTimeMs != 0) { + return backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS ? + getText(R.string.battery_bg_usage_less_minute) : + TextUtils.expandTemplate(getText(R.string.battery_bg_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); + return 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( + return TextUtils.expandTemplate( getText(backgroundTimeMs == 0 ? R.string.battery_total_usage : - R.string.battery_total_usage_and_background_less_minute_usage), + R.string.battery_total_usage_and_bg_less_minute_usage), StringUtil.formatElapsedTime( getContext(), totalTimeMs, @@ -463,8 +480,8 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements /* collapseTimeUnit */ false)); // Shows default summary. } else { - usageTimeSummary = TextUtils.expandTemplate( - getText(R.string.battery_total_and_background_usage), + return TextUtils.expandTemplate( + getText(R.string.battery_total_and_bg_usage), StringUtil.formatElapsedTime( getContext(), totalTimeMs, @@ -476,6 +493,51 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements /* withSeconds */ false, /* collapseTimeUnit */ false)); } - return usageTimeSummary; + } + + private CharSequence getAppActiveSummaryWithSlotTime( + long foregroundTimeMs, long backgroundTimeMs, long totalTimeMs, String slotTime) { + // Shows background summary only if we don't have foreground usage time. + if (foregroundTimeMs == 0 && backgroundTimeMs != 0) { + return backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS ? + TextUtils.expandTemplate( + getText(R.string.battery_bg_usage_less_minute_with_period), + slotTime) : + TextUtils.expandTemplate(getText(R.string.battery_bg_usage_with_period), + StringUtil.formatElapsedTime( + getContext(), + backgroundTimeMs, + /* withSeconds */ false, + /* collapseTimeUnit */ false), slotTime); + // Shows total usage summary only if total usage time is small. + } else if (totalTimeMs < DateUtils.MINUTE_IN_MILLIS) { + return TextUtils.expandTemplate( + getText(R.string.battery_total_usage_less_minute_with_period), slotTime); + // 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_with_period : + R.string.battery_total_usage_and_bg_less_minute_usage_with_period), + StringUtil.formatElapsedTime( + getContext(), + totalTimeMs, + /* withSeconds */ false, + /* collapseTimeUnit */ false), slotTime); + // Shows default summary. + } else { + return TextUtils.expandTemplate( + getText(R.string.battery_total_and_bg_usage_with_period), + StringUtil.formatElapsedTime( + getContext(), + totalTimeMs, + /* withSeconds */ false, + /* collapseTimeUnit */ false), + StringUtil.formatElapsedTime( + getContext(), + backgroundTimeMs, + /* withSeconds */ false, + /* collapseTimeUnit */ false), slotTime); + } } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java index 5185593e8b7..1c2c0596231 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java @@ -81,6 +81,7 @@ public class AdvancedPowerUsageDetailTest { private static final String SUMMARY = "summary"; private static final String[] PACKAGE_NAME = {"com.android.app"}; private static final String USAGE_PERCENT = "16%"; + private static final String SLOT_TIME = "12 am-2 am"; private static final int ICON_ID = 123; private static final int UID = 1; private static final int POWER_MAH = 150; @@ -284,7 +285,7 @@ public class AdvancedPowerUsageDetailTest { } @Test - public void testInitHeader_backgroundTwoMinutesForegroundZero_hasCorrectSummary() { + public void testInitHeader_backgroundTwoMinForegroundZero_hasCorrectSummary() { final long backgroundTimeTwoMinutes = 120000; final long foregroundTimeZero = 0; Bundle bundle = new Bundle(2); @@ -301,7 +302,7 @@ public class AdvancedPowerUsageDetailTest { } @Test - public void testInitHeader_backgroundLessThanAMinutesForegroundZero_hasCorrectSummary() { + public void testInitHeader_backgroundLessThanAMinForegroundZero_hasCorrectSummary() { final long backgroundTimeLessThanAMinute = 59999; final long foregroundTimeZero = 0; Bundle bundle = new Bundle(2); @@ -319,7 +320,7 @@ public class AdvancedPowerUsageDetailTest { } @Test - public void testInitHeader_totalUsageLessThanAMinutes_hasCorrectSummary() { + public void testInitHeader_totalUsageLessThanAMin_hasCorrectSummary() { final long backgroundTimeLessThanHalfMinute = 20000; final long foregroundTimeLessThanHalfMinute = 20000; Bundle bundle = new Bundle(2); @@ -338,7 +339,7 @@ public class AdvancedPowerUsageDetailTest { } @Test - public void testInitHeader_TotalAMinutesBackgroundLessThanAMinutes_hasCorrectSummary() { + public void testInitHeader_TotalAMinutesBackgroundLessThanAMin_hasCorrectSummary() { final long backgroundTimeZero = 59999; final long foregroundTimeTwoMinutes = 1; Bundle bundle = new Bundle(2); @@ -355,7 +356,7 @@ public class AdvancedPowerUsageDetailTest { } @Test - public void testInitHeader_TotalAMinutesBackgroundZero_hasCorrectSummary() { + public void testInitHeader_TotalAMinBackgroundZero_hasCorrectSummary() { final long backgroundTimeZero = 0; final long foregroundTimeAMinutes = 60000; Bundle bundle = new Bundle(2); @@ -372,7 +373,7 @@ public class AdvancedPowerUsageDetailTest { } @Test - public void testInitHeader_foregroundTwoMinutesBackgroundFourMinutes_hasCorrectSummary() { + public void testInitHeader_foregroundTwoMinBackgroundFourMin_hasCorrectSummary() { final long backgroundTimeFourMinute = 240000; final long foregroundTimeTwoMinutes = 120000; Bundle bundle = new Bundle(2); @@ -387,6 +388,79 @@ public class AdvancedPowerUsageDetailTest { .isEqualTo("6 min total • 4 min background for past 24 hr"); } + @Test + public void testInitHeader_totalUsageLessThanAMinWithSlotTime_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); + bundle.putString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME, SLOT_TIME); + 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 12 am-2 am"); + } + + @Test + public void testInitHeader_TotalAMinBackgroundLessThanAMinWithSlotTime_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); + bundle.putString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME, SLOT_TIME); + 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 12 am-2 am"); + } + + @Test + public void testInitHeader_TotalAMinBackgroundZeroWithSlotTime_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); + bundle.putString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME, SLOT_TIME); + 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 12 am-2 am"); + } + + @Test + public void testInitHeader_foregroundTwoMinBackgroundFourMinWithSlotTime_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); + bundle.putString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME, SLOT_TIME); + 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 12 am-2 am"); + } + @Test public void testStartBatteryDetailPage_hasBasicData() { AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,