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

Commit 2e96ec2f authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Hide uninstalled app in restrict app dialog" into pi-dev

parents 8d905b2f 499644b8
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context;
import android.support.annotation.VisibleForTesting;
import android.text.format.DateUtils;

import com.android.settings.Utils;
import com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper;
import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager;
@@ -29,6 +30,7 @@ import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

/**
 * Detector whether to show summary tip. This detector should be executed as the last
@@ -40,8 +42,17 @@ public class RestrictAppDetector implements BatteryTipDetector {
    private BatteryTipPolicy mPolicy;
    @VisibleForTesting
    BatteryDatabaseManager mBatteryDatabaseManager;
    private Context mContext;

    private Predicate<AppInfo> mAppInfoPredicate = new Predicate<AppInfo>() {
        @Override
        public boolean test(AppInfo appInfo) {
            return Utils.getApplicationLabel(mContext, appInfo.packageName) == null;
        }
    };

    public RestrictAppDetector(Context context, BatteryTipPolicy policy) {
        mContext = context;
        mPolicy = policy;
        mBatteryDatabaseManager = BatteryDatabaseManager.getInstance(context);
    }
@@ -56,6 +67,7 @@ public class RestrictAppDetector implements BatteryTipDetector {
            final long oneDayBeforeMs = System.currentTimeMillis() - DateUtils.DAY_IN_MILLIS;
            final List<AppInfo> highUsageApps = mBatteryDatabaseManager.queryAllAnomalies(
                    oneDayBeforeMs, AnomalyDatabaseHelper.State.NEW);
            highUsageApps.removeIf(mAppInfoPredicate);
            if (!highUsageApps.isEmpty()) {
                // If there are new anomalies, show them
                return new RestrictAppTip(BatteryTip.StateType.NEW, highUsageApps);
@@ -63,6 +75,7 @@ public class RestrictAppDetector implements BatteryTipDetector {
                // Otherwise, show auto-handled one if it exists
                final List<AppInfo> autoHandledApps = mBatteryDatabaseManager.queryAllAnomalies(
                        oneDayBeforeMs, AnomalyDatabaseHelper.State.AUTO_HANDLED);
                autoHandledApps.removeIf(mAppInfoPredicate);
                return new RestrictAppTip(autoHandledApps.isEmpty() ? BatteryTip.StateType.INVISIBLE
                        : BatteryTip.StateType.HANDLED, autoHandledApps);
            }
+44 −9
Original line number Diff line number Diff line
@@ -17,19 +17,25 @@
package com.android.settings.fuelgauge.batterytip.detectors;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.spy;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;

import com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper;
import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager;
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
import com.android.settings.testutils.DatabaseTestUtils;
import com.android.settings.testutils.SettingsRobolectricTestRunner;

@@ -48,24 +54,40 @@ import java.util.List;
public class RestrictAppDetectorTest {

    private static final String PACKAGE_NAME = "com.android.app";
    private static final String UNINSTALLED_PACKAGE_NAME = "com.android.uninstalled";
    private Context mContext;
    private BatteryTipPolicy mPolicy;
    private RestrictAppDetector mRestrictAppDetector;
    private List<AppInfo> mAppInfoList;
    private AppInfo mAppInfo;
    @Mock
    private BatteryDatabaseManager mBatteryDatabaseManager;
    @Mock
    private PackageManager mPackageManager;
    @Mock
    private ApplicationInfo mApplicationInfo;

    @Before
    public void setUp() {
    public void setUp() throws PackageManager.NameNotFoundException {
        MockitoAnnotations.initMocks(this);

        mAppInfoList = new ArrayList<>();
        mAppInfoList.add(new AppInfo.Builder().setPackageName(PACKAGE_NAME).build());
        mAppInfo = new AppInfo.Builder()
                .setPackageName(PACKAGE_NAME)
                .build();
        mAppInfoList.add(mAppInfo);

        mContext = RuntimeEnvironment.application;
        mContext = spy(RuntimeEnvironment.application);
        mPolicy = spy(new BatteryTipPolicy(mContext));
        mRestrictAppDetector = new RestrictAppDetector(mContext, mPolicy);
        mRestrictAppDetector.mBatteryDatabaseManager = mBatteryDatabaseManager;

        doReturn(mPackageManager).when(mContext).getPackageManager();
        doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(eq(PACKAGE_NAME),
                anyInt());
        doReturn(PACKAGE_NAME).when(mApplicationInfo).loadLabel(any());
        doThrow(new PackageManager.NameNotFoundException()).when(
                mPackageManager).getApplicationInfo(eq(UNINSTALLED_PACKAGE_NAME), anyInt());
    }

    @After
@@ -92,6 +114,19 @@ public class RestrictAppDetectorTest {
                .isEqualTo(BatteryTip.StateType.HANDLED);
    }

    @Test
    public void testDetect_hasUninstalledAnomaly_removeIt() {
        mAppInfoList.add(new AppInfo.Builder()
                .setPackageName(UNINSTALLED_PACKAGE_NAME)
                .build());
        doReturn(mAppInfoList).when(mBatteryDatabaseManager)
                .queryAllAnomalies(anyLong(), eq(AnomalyDatabaseHelper.State.NEW));

        final RestrictAppTip restrictAppTip = (RestrictAppTip) mRestrictAppDetector.detect();
        assertThat(restrictAppTip.getState()).isEqualTo(BatteryTip.StateType.NEW);
        assertThat(restrictAppTip.getRestrictAppList()).containsExactly(mAppInfo);
    }

    @Test
    public void testDetect_noAnomaly_tipInvisible() {
        doReturn(new ArrayList<AppInfo>()).when(mBatteryDatabaseManager)