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

Commit 5918cd5f authored by jackqdyulei's avatar jackqdyulei
Browse files

Move anomaly code to BatteryTipUtils

Then we could reuse it across settings.

Bug: 74529048
Test: robo test that cover each components still pass
Change-Id: Ied0bbc6e6a1dca9628c2c084c3284ffab2f85160
parent dd9b8af6
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;

import androidx.annotation.VisibleForTesting;

/**
 * Database manager for battery data. Now it only contains anomaly data stored in {@link AppInfo}.
 *
@@ -62,6 +64,11 @@ public class BatteryDatabaseManager {
        return sSingleton;
    }

    @VisibleForTesting(otherwise = VisibleForTesting.NONE)
    public static void setUpForTest(BatteryDatabaseManager batteryDatabaseManager) {
        sSingleton = batteryDatabaseManager;
    }

    /**
     * Insert an anomaly log to database.
     *
+15 −0
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ import com.android.settings.fuelgauge.batterytip.actions.OpenRestrictAppFragment
import com.android.settings.fuelgauge.batterytip.actions.RestrictAppAction;
import com.android.settings.fuelgauge.batterytip.actions.SmartBatteryAction;
import com.android.settings.fuelgauge.batterytip.actions.UnrestrictAppAction;
import com.android.settings.fuelgauge.batterytip.tips.AppLabelPredicate;
import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
@@ -126,4 +128,17 @@ public class BatteryTipUtils {
        statsManager.setBroadcastSubscriber(pendingIntent,
                StatsManagerConfig.ANOMALY_CONFIG_KEY, StatsManagerConfig.SUBSCRIBER_ID);
    }

    /**
     * Detect and return anomaly apps after {@code timeAfterMs}
     */
    public static List<AppInfo> detectAnomalies(Context context, long timeAfterMs) {
        final List<AppInfo> highUsageApps = BatteryDatabaseManager.getInstance(context)
                .queryAllAnomalies(timeAfterMs, AnomalyDatabaseHelper.State.NEW);
        // Remove it if it doesn't have label or been restricted
        highUsageApps.removeIf(
                new AppLabelPredicate(context).or(new AppRestrictionPredicate(context)));

        return highUsageApps;
    }
}
+4 −5
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ 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.BatteryTipUtils;
import com.android.settings.fuelgauge.batterytip.tips.AppLabelPredicate;
import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
@@ -62,12 +63,10 @@ public class RestrictAppDetector implements BatteryTipDetector {
            return getFakeData();
        }
        if (mPolicy.appRestrictionEnabled) {
            // TODO(b/72385333): hook up the query timestamp to server side
            // TODO(b/80192137): 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);
            // Remove it if it doesn't have label or been restricted
            highUsageApps.removeIf(mAppLabelPredicate.or(mAppRestrictionPredicate));
            final List<AppInfo> highUsageApps = BatteryTipUtils.detectAnomalies(mContext,
                    oneDayBeforeMs);
            if (!highUsageApps.isEmpty()) {
                // If there are new anomalies, show them
                return new RestrictAppTip(BatteryTip.StateType.NEW, highUsageApps);
+1 −0
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ public class RestrictAppDetectorTest {
                AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UNRESTRICTED_UID,
                UNRESTRICTED_PACKAGE_NAME);

        BatteryDatabaseManager.setUpForTest(mBatteryDatabaseManager);
        doReturn(mPackageManager).when(mContext).getPackageManager();
        doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(any(),
                anyInt());