diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java index fd150e4c93e..1b6e2f03ae3 100644 --- a/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java +++ b/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java @@ -19,6 +19,7 @@ package com.android.settings.fuelgauge.batterytip.detectors; import android.content.Context; import android.os.BatteryStats; import android.support.annotation.VisibleForTesting; +import android.text.format.DateUtils; import com.android.internal.os.BatterySipper; import com.android.internal.os.BatteryStatsHelper; @@ -72,18 +73,20 @@ public class HighUsageDetector implements BatteryTipDetector { final long foregroundTimeMs = mBatteryUtils.getProcessTimeMs( BatteryUtils.StatusType.FOREGROUND, batterySipper.uidObj, BatteryStats.STATS_SINCE_CHARGED); - mHighUsageAppList.add(new AppInfo.Builder() - .setUid(batterySipper.getUid()) - .setPackageName( - mBatteryUtils.getPackageName(batterySipper.getUid())) - .setScreenOnTimeMs(foregroundTimeMs) - .build()); + if (foregroundTimeMs >= DateUtils.MINUTE_IN_MILLIS) { + mHighUsageAppList.add(new AppInfo.Builder() + .setUid(batterySipper.getUid()) + .setPackageName( + mBatteryUtils.getPackageName(batterySipper.getUid())) + .setScreenOnTimeMs(foregroundTimeMs) + .build()); + } } } + Collections.sort(mHighUsageAppList, Collections.reverseOrder()); mHighUsageAppList = mHighUsageAppList.subList(0, Math.min(mPolicy.highUsageAppCount, mHighUsageAppList.size())); - Collections.sort(mHighUsageAppList, Collections.reverseOrder()); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java index 14627c5b63e..d983dfc7eed 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetectorTest.java @@ -17,8 +17,10 @@ package com.android.settings.fuelgauge.batterytip.detectors; import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -48,7 +50,8 @@ import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) public class HighUsageDetectorTest { - private static final int UID = 123; + private static final int UID_HIGH = 123; + private static final int UID_ZERO = 345; private static final long SCREEN_ON_TIME_MS = DateUtils.HOUR_IN_MILLIS; private Context mContext; @Mock @@ -56,7 +59,9 @@ public class HighUsageDetectorTest { @Mock private BatteryUtils mBatteryUtils; @Mock - private BatterySipper mBatterySipper; + private BatterySipper mHighBatterySipper; + @Mock + private BatterySipper mZeroBatterySipper; @Mock private HighUsageDataParser mDataParser; @@ -75,14 +80,25 @@ public class HighUsageDetectorTest { mHighUsageDetector.mBatteryUtils = mBatteryUtils; mHighUsageDetector.mDataParser = mDataParser; doNothing().when(mHighUsageDetector).parseBatteryData(); - doReturn(UID).when(mBatterySipper).getUid(); + doReturn(UID_HIGH).when(mHighBatterySipper).getUid(); + mHighBatterySipper.uidObj = mock(BatteryStats.Uid.class); + mZeroBatterySipper.uidObj = mock(BatteryStats.Uid.class); + doReturn(UID_ZERO).when(mZeroBatterySipper).getUid(); mAppInfo = new AppInfo.Builder() - .setUid(UID) + .setUid(UID_HIGH) .setScreenOnTimeMs(SCREEN_ON_TIME_MS) .build(); + doReturn(SCREEN_ON_TIME_MS).when(mBatteryUtils).getProcessTimeMs( + BatteryUtils.StatusType.FOREGROUND, mHighBatterySipper.uidObj, + BatteryStats.STATS_SINCE_CHARGED); + doReturn(0L).when(mBatteryUtils).getProcessTimeMs( + BatteryUtils.StatusType.FOREGROUND, mZeroBatterySipper.uidObj, + BatteryStats.STATS_SINCE_CHARGED); + mUsageList = new ArrayList<>(); - mUsageList.add(mBatterySipper); + mUsageList.add(mHighBatterySipper); + when(mBatteryStatsHelper.getUsageList()).thenReturn(mUsageList); } @Test @@ -95,10 +111,16 @@ public class HighUsageDetectorTest { @Test public void testDetect_containsHighUsageApp_tipVisible() { doReturn(true).when(mDataParser).isDeviceHeavilyUsed(); - when(mBatteryStatsHelper.getUsageList()).thenReturn(mUsageList); - doReturn(SCREEN_ON_TIME_MS).when(mBatteryUtils).getProcessTimeMs( - BatteryUtils.StatusType.FOREGROUND, mBatterySipper.uidObj, - BatteryStats.STATS_SINCE_CHARGED); + + final HighUsageTip highUsageTip = (HighUsageTip) mHighUsageDetector.detect(); + assertThat(highUsageTip.isVisible()).isTrue(); + assertThat(highUsageTip.getHighUsageAppList()).containsExactly(mAppInfo); + } + + @Test + public void testDetect_containsHighUsageApp_removeZeroOne() { + doReturn(true).when(mDataParser).isDeviceHeavilyUsed(); + mUsageList.add(mZeroBatterySipper); final HighUsageTip highUsageTip = (HighUsageTip) mHighUsageDetector.detect(); assertThat(highUsageTip.isVisible()).isTrue();