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

Commit 54d6620e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Update detector and action for restrict app"

parents e2551064 af2ece73
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> {
        tips.add(new SmartBatteryDetector(policy, context.getContentResolver()).detect());
        tips.add(new EarlyWarningDetector(policy, context).detect());
        tips.add(new SummaryDetector(policy).detect());
        tips.add(new RestrictAppDetector(policy).detect());
        tips.add(new RestrictAppDetector(context, policy).detect());

        Collections.sort(tips);
        return tips;
+7 −0
Original line number Diff line number Diff line
@@ -21,7 +21,9 @@ import android.content.Context;
import android.support.annotation.VisibleForTesting;

import com.android.settings.fuelgauge.BatteryUtils;
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.tips.RestrictAppTip;

import java.util.List;
@@ -32,12 +34,15 @@ import java.util.List;
public class RestrictAppAction extends BatteryTipAction {
    private RestrictAppTip mRestrictAppTip;
    @VisibleForTesting
    BatteryDatabaseManager mBatteryDatabaseManager;
    @VisibleForTesting
    BatteryUtils mBatteryUtils;

    public RestrictAppAction(Context context, RestrictAppTip tip) {
        super(context);
        mRestrictAppTip = tip;
        mBatteryUtils = BatteryUtils.getInstance(context);
        mBatteryDatabaseManager = new BatteryDatabaseManager(context);
    }

    /**
@@ -53,5 +58,7 @@ public class RestrictAppAction extends BatteryTipAction {
            mBatteryUtils.setForceAppStandby(mBatteryUtils.getPackageUid(packageName), packageName,
                    AppOpsManager.MODE_IGNORED);
        }

        mBatteryDatabaseManager.updateAnomalies(appInfos, AnomalyDatabaseHelper.State.HANDLED);
    }
}
+40 −5
Original line number Diff line number Diff line
@@ -16,7 +16,13 @@

package com.android.settings.fuelgauge.batterytip.detectors;

import android.content.Context;
import android.support.annotation.VisibleForTesting;
import android.text.format.DateUtils;

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;
@@ -29,18 +35,47 @@ import java.util.List;
 * {@link BatteryTipDetector} since it need the most up-to-date {@code visibleTips}
 */
public class RestrictAppDetector implements BatteryTipDetector {
    @VisibleForTesting
    static final boolean USE_FAKE_DATA = false;
    private BatteryTipPolicy mPolicy;
    @VisibleForTesting
    BatteryDatabaseManager mBatteryDatabaseManager;

    public RestrictAppDetector(BatteryTipPolicy policy) {
    public RestrictAppDetector(Context context, BatteryTipPolicy policy) {
        mPolicy = policy;
        mBatteryDatabaseManager = new BatteryDatabaseManager(context);
    }

    @Override
    public BatteryTip detect() {
        // TODO(b/70570352): Detect restrict apps here, get data from database
        if (USE_FAKE_DATA) {
            return getFakeData();
        }
        if (mPolicy.appRestrictionEnabled) {
            // TODO(b/72385333): hook up the query timestamp to server side
            final long oneDayBeforeMs = System.currentTimeMillis() - DateUtils.DAY_IN_MILLIS;
            final List<AppInfo> highUsageApps = mBatteryDatabaseManager.queryAllAnomalies(
                    oneDayBeforeMs, AnomalyDatabaseHelper.State.NEW);
            if (!highUsageApps.isEmpty()) {
                // If there are new anomalies, show them
                return new RestrictAppTip(BatteryTip.StateType.NEW, highUsageApps);
            } else {
                // Otherwise, show auto-handled one if it exists
                final List<AppInfo> autoHandledApps = mBatteryDatabaseManager.queryAllAnomalies(
                        oneDayBeforeMs, AnomalyDatabaseHelper.State.AUTO_HANDLED);
                return new RestrictAppTip(autoHandledApps.isEmpty() ? BatteryTip.StateType.INVISIBLE
                        : BatteryTip.StateType.HANDLED, autoHandledApps);
            }
        } else {
            return new RestrictAppTip(BatteryTip.StateType.INVISIBLE, new ArrayList<>());
        }
    }

    private BatteryTip getFakeData() {
        final List<AppInfo> highUsageApps = new ArrayList<>();
        return new RestrictAppTip(
                highUsageApps.isEmpty() ? BatteryTip.StateType.INVISIBLE : BatteryTip.StateType.NEW,
                highUsageApps);
        highUsageApps.add(new AppInfo.Builder()
                .setPackageName("com.android.settings")
                .build());
        return new RestrictAppTip(BatteryTip.StateType.NEW, highUsageApps);
    }
}
+8 −1
Original line number Diff line number Diff line
@@ -81,7 +81,14 @@ public class RestrictAppTip extends BatteryTip {

    @Override
    public void updateState(BatteryTip tip) {
        mState = tip.mState;
        if (tip.mState == StateType.NEW) {
            // Display it if new anomaly comes
            mState = StateType.NEW;
            mRestrictAppList = ((RestrictAppTip) tip).mRestrictAppList;
        } else if (mState == StateType.NEW && tip.mState == StateType.INVISIBLE) {
            // If anomaly becomes invisible, show it as handled
            mState = StateType.HANDLED;
        }
    }

    public List<AppInfo> getRestrictAppList() {
+7 −1
Original line number Diff line number Diff line
@@ -27,8 +27,10 @@ import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.batterytip.AppInfo;
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;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -69,6 +71,11 @@ public class RestrictAppActionTest {
        mRestrictAppAction.mBatteryUtils = mBatteryUtils;
    }

    @After
    public void cleanUp() {
        DatabaseTestUtils.clearDb(mContext);
    }

    @Test
    public void testHandlePositiveAction() {
        mRestrictAppAction.handlePositiveAction();
@@ -79,5 +86,4 @@ public class RestrictAppActionTest {
                eq(AppOpsManager.MODE_IGNORED));
    }


}
Loading