Loading src/com/android/settings/fuelgauge/anomaly/action/AnomalyAction.java +9 −2 Original line number Diff line number Diff line Loading @@ -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(); } src/com/android/settings/fuelgauge/anomaly/action/BackgroundCheckAction.java +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading src/com/android/settings/fuelgauge/anomaly/action/ForceStopAction.java +20 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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; Loading src/com/android/settings/fuelgauge/anomaly/checker/WakeLockAnomalyDetector.java +10 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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)); Loading @@ -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; } Loading Loading @@ -111,8 +114,11 @@ public class WakeLockAnomalyDetector implements AnomalyDetector { .setDisplayName(displayName) .setPackageName(packageName) .build(); if (mAnomalyAction.isActionActive(anomaly)) { anomalies.add(anomaly); } } } return anomalies; Loading src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetector.java +10 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; } Loading Loading @@ -91,10 +95,13 @@ public class WakeupAlarmAnomalyDetector implements AnomalyDetector { .setDisplayName(displayName) .setPackageName(packageName) .build(); if (mAnomalyAction.isActionActive(anomaly)) { anomalies.add(anomaly); } } } } return anomalies; } Loading Loading
src/com/android/settings/fuelgauge/anomaly/action/AnomalyAction.java +9 −2 Original line number Diff line number Diff line Loading @@ -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(); }
src/com/android/settings/fuelgauge/anomaly/action/BackgroundCheckAction.java +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
src/com/android/settings/fuelgauge/anomaly/action/ForceStopAction.java +20 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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; Loading
src/com/android/settings/fuelgauge/anomaly/checker/WakeLockAnomalyDetector.java +10 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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)); Loading @@ -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; } Loading Loading @@ -111,8 +114,11 @@ public class WakeLockAnomalyDetector implements AnomalyDetector { .setDisplayName(displayName) .setPackageName(packageName) .build(); if (mAnomalyAction.isActionActive(anomaly)) { anomalies.add(anomaly); } } } return anomalies; Loading
src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetector.java +10 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; } Loading Loading @@ -91,10 +95,13 @@ public class WakeupAlarmAnomalyDetector implements AnomalyDetector { .setDisplayName(displayName) .setPackageName(packageName) .build(); if (mAnomalyAction.isActionActive(anomaly)) { anomalies.add(anomaly); } } } } return anomalies; } Loading