Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b9682ce authored by Lei Yu's avatar Lei Yu
Browse files

In High usage, hide apps without screen time.

If the screen time is less than 1 minute, don't show it in high
usage dialog.

Also sort the list first before cut the list size.

Change-Id: I2f8876dcc16b3d6156cb0aa9e19c7fdd4ceac34e
Fixes: 77303928
Test: RunSettingsRoboTests
parent f3789adf
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -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,6 +73,7 @@ public class HighUsageDetector implements BatteryTipDetector {
                        final long foregroundTimeMs = mBatteryUtils.getProcessTimeMs(
                                BatteryUtils.StatusType.FOREGROUND, batterySipper.uidObj,
                                BatteryStats.STATS_SINCE_CHARGED);
                        if (foregroundTimeMs >= DateUtils.MINUTE_IN_MILLIS) {
                            mHighUsageAppList.add(new AppInfo.Builder()
                                    .setUid(batterySipper.getUid())
                                    .setPackageName(
@@ -80,10 +82,11 @@ public class HighUsageDetector implements BatteryTipDetector {
                                    .build());
                        }
                    }
                }

                Collections.sort(mHighUsageAppList, Collections.reverseOrder());
                mHighUsageAppList = mHighUsageAppList.subList(0,
                        Math.min(mPolicy.highUsageAppCount, mHighUsageAppList.size()));
                Collections.sort(mHighUsageAppList, Collections.reverseOrder());
            }
        }

+31 −9
Original line number Diff line number Diff line
@@ -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();