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

Commit 68aaf662 authored by jackqdyulei's avatar jackqdyulei Committed by android-build-merger
Browse files

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

am: 010c9d95

Change-Id: I5d7d02d5387b8d58d8ea6f158311c1aae659fe19
parents 0092a5c6 010c9d95
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