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

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

Merge "Add action active check for anomaly action." into oc-dr1-dev

parents 9871df58 9453e89a
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -24,11 +24,18 @@ import com.android.settings.fuelgauge.anomaly.Anomaly;
public interface AnomalyAction {
    /**
     * handle the action when user clicks positive button
     * @param Anomaly about the app that we need to handle
     * @param anomaly about the app that we need to handle
     * @param metricsKey key for the page that invokes the action
     *
     * @see com.android.internal.logging.nano.MetricsProto
     */
    void handlePositiveAction(Anomaly Anomaly, int metricsKey);
    void handlePositiveAction(Anomaly anomaly, int metricsKey);

    /**
     * Check whether the action is active for {@code anomaly}
     * @param anomaly about the app that we need to handle
     * @return {@code true} if action is active, otherwise return {@code false}
     */
    boolean isActionActive(Anomaly anomaly);
    int getActionType();
}
+8 −0
Original line number Diff line number Diff line
@@ -45,6 +45,14 @@ public class BackgroundCheckAction implements AnomalyAction {
                AppOpsManager.MODE_IGNORED);
    }

    @Override
    public boolean isActionActive(Anomaly anomaly) {
        final int mode = mAppOpsManager
                .checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, anomaly.uid,
                        anomaly.packageName);
        return mode != AppOpsManager.MODE_IGNORED && mode != AppOpsManager.MODE_ERRORED;
    }

    @Override
    public int getActionType() {
        return Anomaly.AnomalyActionType.BACKGROUND_CHECK;
+20 −0
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ package com.android.settings.fuelgauge.anomaly.action;

import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.util.Log;
import android.util.Pair;

import com.android.internal.logging.nano.MetricsProto;
@@ -25,20 +28,25 @@ import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.fuelgauge.anomaly.Anomaly;
import com.android.settings.overlay.FeatureFactory;

import java.util.List;

/**
 * Force stop action for anomaly app, which means to stop the app which causes anomaly
 */
public class ForceStopAction implements AnomalyAction {
    private static final String TAG = "ForceStopAction";

    private Context mContext;
    private MetricsFeatureProvider mMetricsFeatureProvider;
    private ActivityManager mActivityManager;
    private PackageManager mPackageManager;

    public ForceStopAction(Context context) {
        mContext = context;
        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
        mActivityManager = (ActivityManager) context.getSystemService(
                Context.ACTIVITY_SERVICE);
        mPackageManager = context.getPackageManager();
    }

    @Override
@@ -52,6 +60,18 @@ public class ForceStopAction implements AnomalyAction {
        mActivityManager.forceStopPackage(packageName);
    }

    @Override
    public boolean isActionActive(Anomaly anomaly) {
        try {
            ApplicationInfo info = mPackageManager.getApplicationInfo(anomaly.packageName,
                    PackageManager.GET_META_DATA);
            return (info.flags & ApplicationInfo.FLAG_STOPPED) == 0;
        } catch (PackageManager.NameNotFoundException e) {
            Log.e(TAG, "Cannot find info for app: " + anomaly.packageName);
        }
        return false;
    }

    @Override
    public int getActionType() {
        return Anomaly.AnomalyActionType.FORCE_STOP;
+10 −4
Original line number Diff line number Diff line
@@ -17,14 +17,11 @@
package com.android.settings.fuelgauge.anomaly.checker;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.BatteryStats;
import android.os.SystemClock;
import android.support.annotation.VisibleForTesting;
import android.text.format.DateUtils;
import android.util.ArrayMap;
import android.util.Log;

import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
@@ -32,6 +29,8 @@ import com.android.settings.Utils;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.anomaly.Anomaly;
import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
import com.android.settings.fuelgauge.anomaly.AnomalyUtils;
import com.android.settings.fuelgauge.anomaly.action.AnomalyAction;

import java.util.ArrayList;
import java.util.List;
@@ -47,6 +46,8 @@ public class WakeLockAnomalyDetector implements AnomalyDetector {
    BatteryUtils mBatteryUtils;
    @VisibleForTesting
    long mWakeLockThresholdMs;
    @VisibleForTesting
    AnomalyAction mAnomalyAction;

    public WakeLockAnomalyDetector(Context context) {
        this(context, new AnomalyDetectionPolicy(context));
@@ -57,6 +58,8 @@ public class WakeLockAnomalyDetector implements AnomalyDetector {
        mContext = context;
        mPackageManager = context.getPackageManager();
        mBatteryUtils = BatteryUtils.getInstance(context);
        mAnomalyAction = AnomalyUtils.getInstance(context).getAnomalyAction(
                Anomaly.AnomalyType.WAKE_LOCK);

        mWakeLockThresholdMs = policy.wakeLockThreshold;
    }
@@ -111,8 +114,11 @@ public class WakeLockAnomalyDetector implements AnomalyDetector {
                        .setDisplayName(displayName)
                        .setPackageName(packageName)
                        .build();

                if (mAnomalyAction.isActionActive(anomaly)) {
                    anomalies.add(anomaly);
                }
            }

        }
        return anomalies;
+10 −3
Original line number Diff line number Diff line
@@ -17,9 +17,7 @@
package com.android.settings.fuelgauge.anomaly.checker;

import android.content.Context;
import android.content.pm.PackageManager;
import android.os.BatteryStats;
import android.os.SystemClock;
import android.support.annotation.VisibleForTesting;
import android.text.format.DateUtils;
import android.util.ArrayMap;
@@ -30,6 +28,8 @@ import com.android.settings.Utils;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.anomaly.Anomaly;
import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
import com.android.settings.fuelgauge.anomaly.AnomalyUtils;
import com.android.settings.fuelgauge.anomaly.action.AnomalyAction;

import java.util.ArrayList;
import java.util.List;
@@ -41,6 +41,8 @@ public class WakeupAlarmAnomalyDetector implements AnomalyDetector {
    private static final String TAG = "WakeupAlarmAnomalyDetector";
    @VisibleForTesting
    BatteryUtils mBatteryUtils;
    @VisibleForTesting
    AnomalyAction mAnomalyAction;
    private long mWakeupAlarmThreshold;
    private Context mContext;

@@ -52,6 +54,8 @@ public class WakeupAlarmAnomalyDetector implements AnomalyDetector {
    WakeupAlarmAnomalyDetector(Context context, AnomalyDetectionPolicy policy) {
        mContext = context;
        mBatteryUtils = BatteryUtils.getInstance(context);
        mAnomalyAction = AnomalyUtils.getInstance(context).getAnomalyAction(
                Anomaly.AnomalyType.WAKEUP_ALARM);
        mWakeupAlarmThreshold = policy.wakeupAlarmThreshold;
    }

@@ -91,10 +95,13 @@ public class WakeupAlarmAnomalyDetector implements AnomalyDetector {
                            .setDisplayName(displayName)
                            .setPackageName(packageName)
                            .build();

                    if (mAnomalyAction.isActionActive(anomaly)) {
                        anomalies.add(anomaly);
                    }
                }
            }
        }

        return anomalies;
    }
Loading