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

Commit 0dce3c07 authored by jackqdyulei's avatar jackqdyulei
Browse files

Add framework for anomaly detection flags

This cl adds isAnomalyDetectorEnabled(type), which decides whether
to turn on specific check with that type.

Added method is used in AnomalyLoader.

Bug: 36924669
Test: RunSettingsRoboTests
Change-Id: I71c6acb1c58c24453a1936c5c36f59fe4e86cfd4
parent 910f69c6
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import com.android.internal.os.BatterySipper;
import com.android.settings.fuelgauge.anomaly.Anomaly;

/**
 * Feature Provider used in power usage
@@ -85,4 +86,9 @@ public interface PowerUsageFeatureProvider {
     * Returns the the estimate in the cursor as a long or -1 if the cursor is null
     */
    long getTimeRemainingEstimate(Cursor cursor);

    /**
     * Check whether a specific anomaly detector is enabled
     */
    boolean isAnomalyDetectorEnabled(@Anomaly.AnomalyType int type);
}
+6 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.net.Uri;
import android.os.Process;
import com.android.internal.os.BatterySipper;
import com.android.internal.util.ArrayUtils;
import com.android.settings.fuelgauge.anomaly.Anomaly;

public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider {

@@ -111,4 +112,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider
    public long getTimeRemainingEstimate(Cursor cursor) {
        return 0;
    }

    @Override
    public boolean isAnomalyDetectorEnabled(@Anomaly.AnomalyType int type) {
        return false;
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -45,6 +45,9 @@ public class Anomaly implements Parcelable {
        int FORCE_STOP = 0;
    }

    @AnomalyType
    public static final int[] ANOMALY_TYPE_LIST = {AnomalyType.WAKE_LOCK};

    /**
     * Type of this this anomaly
     */
+15 −4
Original line number Diff line number Diff line
@@ -17,9 +17,11 @@
package com.android.settings.fuelgauge.anomaly;

import android.content.Context;
import android.support.annotation.VisibleForTesting;

import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.fuelgauge.anomaly.checker.WakeLockAnomalyDetector;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.utils.AsyncLoader;

import java.util.ArrayList;
@@ -29,13 +31,18 @@ import java.util.List;
 * Loader to compute which apps are anomaly and return a anomaly list. It will return
 * an empty list if there is no anomaly.
 */
//TODO(b/36924669): add test for this file, for now it seems there is nothing to test
public class AnomalyLoader extends AsyncLoader<List<Anomaly>> {
    private BatteryStatsHelper mBatteryStatsHelper;
    private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
    @VisibleForTesting
    AnomalyUtils mAnomalyUtils;

    public AnomalyLoader(Context context, BatteryStatsHelper batteryStatsHelper) {
        super(context);
        mBatteryStatsHelper = batteryStatsHelper;
        mPowerUsageFeatureProvider = FeatureFactory.getFactory(
                context).getPowerUsageFeatureProvider(context);
        mAnomalyUtils = AnomalyUtils.getInstance(context);
    }

    @Override
@@ -45,8 +52,12 @@ public class AnomalyLoader extends AsyncLoader<List<Anomaly>> {
    @Override
    public List<Anomaly> loadInBackground() {
        final List<Anomaly> anomalies = new ArrayList<>();
        anomalies.addAll(new WakeLockAnomalyDetector(getContext())
                .detectAnomalies(mBatteryStatsHelper));
        for (@Anomaly.AnomalyType int type : Anomaly.ANOMALY_TYPE_LIST) {
            if (mPowerUsageFeatureProvider.isAnomalyDetectorEnabled(type)) {
                anomalies.addAll(mAnomalyUtils.getAnomalyDetector(type).detectAnomalies(
                        mBatteryStatsHelper));
            }
        }

        return anomalies;
    }
+18 −1
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.support.annotation.VisibleForTesting;

import com.android.settings.fuelgauge.anomaly.action.AnomalyAction;
import com.android.settings.fuelgauge.anomaly.action.ForceStopAction;
import com.android.settings.fuelgauge.anomaly.checker.AnomalyDetector;
import com.android.settings.fuelgauge.anomaly.checker.WakeLockAnomalyDetector;

/**
 * Utility class for anomaly detection
@@ -47,7 +49,7 @@ public class AnomalyUtils {
     *
     * @return corresponding {@link AnomalyAction}, or null if cannot find it.
     */
    public final AnomalyAction getAnomalyAction(@Anomaly.AnomalyType int anomalyType) {
    public AnomalyAction getAnomalyAction(@Anomaly.AnomalyType int anomalyType) {
        switch (anomalyType) {
            case Anomaly.AnomalyType.WAKE_LOCK:
                return new ForceStopAction(mContext);
@@ -55,4 +57,19 @@ public class AnomalyUtils {
                return null;
        }
    }

    /**
     * Return the corresponding {@link AnomalyDetector} according to
     * {@link com.android.settings.fuelgauge.anomaly.Anomaly.AnomalyType}
     *
     * @return corresponding {@link AnomalyDetector}, or null if cannot find it.
     */
    public AnomalyDetector getAnomalyDetector(@Anomaly.AnomalyType int anomalyType) {
        switch (anomalyType) {
            case Anomaly.AnomalyType.WAKE_LOCK:
                return new WakeLockAnomalyDetector(mContext);
            default:
                return null;
        }
    }
}
Loading