From 34145705de97c99eb809aaa275480f7bfa45f1ed Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Thu, 20 Apr 2017 09:48:02 -0700 Subject: [PATCH] Fix wrong voice call time in battery page The voice call is belong to DrainType.PHONE, which is not an app. This cl stop using method in BatteryUtils to calculate the time, since that method should only be used for DrainType.APP Bug: 37402819 Test: RunSettingsRoboTests Change-Id: I3aa7366401e54df87ffe913af0dcb1bcd5abf110 --- .../fuelgauge/AdvancedPowerUsageDetail.java | 9 +++++---- .../AdvancedPowerUsageDetailTest.java | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index 0c798a64baa..a73902afb42 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -101,11 +101,12 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase implements final BatterySipper sipper = entry.sipper; final BatteryStats.Uid uid = sipper.uidObj; final BatteryUtils batteryUtils = BatteryUtils.getInstance(caller); + final boolean isTypeApp = sipper.drainType == BatterySipper.DrainType.APP; - final long backgroundTimeMs = batteryUtils.getProcessTimeMs( - BatteryUtils.StatusType.BACKGROUND, uid, which); - final long foregroundTimeMs = batteryUtils.getProcessTimeMs( - BatteryUtils.StatusType.FOREGROUND, uid, which); + final long foregroundTimeMs = isTypeApp ? batteryUtils.getProcessTimeMs( + BatteryUtils.StatusType.FOREGROUND, uid, which) : sipper.usageTimeMs; + final long backgroundTimeMs = isTypeApp ? batteryUtils.getProcessTimeMs( + BatteryUtils.StatusType.BACKGROUND, uid, which) : 0; if (ArrayUtils.isEmpty(sipper.mPackages)) { // populate data for system app diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java index 801034c76e4..15fec3c33a1 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java @@ -73,6 +73,8 @@ public class AdvancedPowerUsageDetailTest { private static final long FOREGROUND_TIME_US = 200 * 1000; private static final long BACKGROUND_TIME_MS = 100; private static final long FOREGROUND_TIME_MS = 200; + private static final long PHONE_FOREGROUND_TIME_MS = 250 * 1000; + private static final long PHONE_BACKGROUND_TIME_MS = 0; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; @@ -137,6 +139,7 @@ public class AdvancedPowerUsageDetailTest { ReflectionHelpers.setField(mBatteryEntry, "sipper", mBatterySipper); mBatteryEntry.iconId = ICON_ID; mBatterySipper.uidObj = mUid; + mBatterySipper.drainType = BatterySipper.DrainType.APP; mFragment.mHeaderPreference = mHeaderPreference; mFragment.mState = mState; @@ -190,6 +193,23 @@ public class AdvancedPowerUsageDetailTest { USAGE_PERCENT); } + @Test + public void testStartBatteryDetailPage_typeNotApp_hasBasicData() { + mBatterySipper.drainType = BatterySipper.DrainType.PHONE; + mBatterySipper.usageTimeMs = PHONE_FOREGROUND_TIME_MS; + + AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, mBatteryStatsHelper, 0, + mBatteryEntry, USAGE_PERCENT); + + assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); + assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo( + PHONE_FOREGROUND_TIME_MS); + assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo( + PHONE_BACKGROUND_TIME_MS); + assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo( + USAGE_PERCENT); + } + @Test public void testStartBatteryDetailPage_NormalApp() { mBatterySipper.mPackages = PACKAGE_NAME;