diff --git a/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java b/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java index 7dbae36bba8..647737c6939 100644 --- a/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java +++ b/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java @@ -37,9 +37,13 @@ public class AnomalyDetectionPolicy { @VisibleForTesting static final String KEY_WAKEUP_ALARM_DETECTION_ENABLED = "wakeup_alarm_enabled"; @VisibleForTesting + static final String KEY_BLUETOOTH_SCAN_DETECTION_ENABLED = "bluetooth_scan_enabled"; + @VisibleForTesting static final String KEY_WAKELOCK_THRESHOLD = "wakelock_threshold"; @VisibleForTesting static final String KEY_WAKEUP_ALARM_THRESHOLD = "wakeup_alarm_threshold"; + @VisibleForTesting + static final String KEY_BLUETOOTH_SCAN_THRESHOLD = "bluetooth_scan_threshold"; /** * {@code true} if general anomaly detection is enabled @@ -65,6 +69,14 @@ public class AnomalyDetectionPolicy { */ public final boolean wakeupAlarmDetectionEnabled; + /** + * {@code true} if bluetooth scanning detection is enabled + * + * @see Settings.Global#ANOMALY_DETECTION_CONSTANTS + * @see #KEY_BLUETOOTH_SCAN_THRESHOLD + */ + public final boolean bluetoothScanDetectionEnabled; + /** * Threshold for wakelock time in milli seconds * @@ -81,6 +93,14 @@ public class AnomalyDetectionPolicy { */ public final long wakeupAlarmThreshold; + /** + * Threshold for bluetooth unoptimized scanning time in milli seconds + * + * @see Settings.Global#ANOMALY_DETECTION_CONSTANTS + * @see #KEY_BLUETOOTH_SCAN_THRESHOLD + */ + public final long bluetoothScanThreshold; + private final KeyValueListParserWrapper mParserWrapper; public AnomalyDetectionPolicy(Context context) { @@ -103,9 +123,13 @@ public class AnomalyDetectionPolicy { wakeLockDetectionEnabled = mParserWrapper.getBoolean(KEY_WAKELOCK_DETECTION_ENABLED, true); wakeupAlarmDetectionEnabled = mParserWrapper.getBoolean(KEY_WAKEUP_ALARM_DETECTION_ENABLED, true); + bluetoothScanDetectionEnabled = mParserWrapper.getBoolean( + KEY_BLUETOOTH_SCAN_DETECTION_ENABLED, true); wakeLockThreshold = mParserWrapper.getLong(KEY_WAKELOCK_THRESHOLD, DateUtils.HOUR_IN_MILLIS); wakeupAlarmThreshold = mParserWrapper.getLong(KEY_WAKEUP_ALARM_THRESHOLD, 60); + bluetoothScanThreshold = mParserWrapper.getLong(KEY_BLUETOOTH_SCAN_THRESHOLD, + 30 * DateUtils.MINUTE_IN_MILLIS); } public boolean isAnomalyDetectorEnabled(@Anomaly.AnomalyType int type) { @@ -114,6 +138,8 @@ public class AnomalyDetectionPolicy { return wakeLockDetectionEnabled; case Anomaly.AnomalyType.WAKEUP_ALARM: return wakeupAlarmDetectionEnabled; + case Anomaly.AnomalyType.BLUETOOTH_SCAN: + return bluetoothScanDetectionEnabled; default: return false; // Disabled when no this type } diff --git a/src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetector.java b/src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetector.java index a0aa8b79f7f..619386e2a1f 100644 --- a/src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetector.java +++ b/src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetector.java @@ -57,8 +57,7 @@ public class BluetoothScanAnomalyDetector implements AnomalyDetector { mBatteryUtils = BatteryUtils.getInstance(context); mAnomalyAction = AnomalyUtils.getInstance(context).getAnomalyAction( Anomaly.AnomalyType.BLUETOOTH_SCAN); - //TODO(b/36921532): hook up it to AnomalyDectionPolicy - mBluetoothScanningThreshold = 30 * DateUtils.MINUTE_IN_MILLIS; + mBluetoothScanningThreshold = policy.bluetoothScanThreshold; } @Override diff --git a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicyTest.java index d5bd53b0a1c..169cba8e9bf 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicyTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicyTest.java @@ -44,7 +44,9 @@ public class AnomalyDetectionPolicyTest { + ",wakelock_enabled=false" + ",wakelock_threshold=3000" + ",wakeup_alarm_enabled=true" - + ",wakeup_alarm_threshold=100"; + + ",wakeup_alarm_threshold=100" + + ",bluetooth_scan_enabled=true" + + ",bluetooth_scan_threshold=2000"; private Context mContext; private KeyValueListParserWrapper mKeyValueListParserWrapper; @@ -64,6 +66,8 @@ public class AnomalyDetectionPolicyTest { assertThat(anomalyDetectionPolicy.wakeLockThreshold).isEqualTo(3000); assertThat(anomalyDetectionPolicy.wakeupAlarmDetectionEnabled).isTrue(); assertThat(anomalyDetectionPolicy.wakeupAlarmThreshold).isEqualTo(100); + assertThat(anomalyDetectionPolicy.bluetoothScanDetectionEnabled).isTrue(); + assertThat(anomalyDetectionPolicy.bluetoothScanThreshold).isEqualTo(2000); } @Test @@ -82,6 +86,9 @@ public class AnomalyDetectionPolicyTest { assertThat(anomalyDetectionPolicy.wakeLockThreshold).isEqualTo(DateUtils.HOUR_IN_MILLIS); assertThat(anomalyDetectionPolicy.wakeupAlarmDetectionEnabled).isTrue(); assertThat(anomalyDetectionPolicy.wakeupAlarmThreshold).isEqualTo(60); + assertThat(anomalyDetectionPolicy.bluetoothScanDetectionEnabled).isTrue(); + assertThat(anomalyDetectionPolicy.bluetoothScanThreshold).isEqualTo( + 30 * DateUtils.MINUTE_IN_MILLIS); } @Test @@ -92,6 +99,8 @@ public class AnomalyDetectionPolicyTest { Anomaly.AnomalyType.WAKE_LOCK)).isFalse(); assertThat(anomalyDetectionPolicy.isAnomalyDetectorEnabled( Anomaly.AnomalyType.WAKEUP_ALARM)).isTrue(); + assertThat(anomalyDetectionPolicy.isAnomalyDetectorEnabled( + Anomaly.AnomalyType.BLUETOOTH_SCAN)).isTrue(); } private AnomalyDetectionPolicy createAnomalyPolicyWithConfig() { @@ -104,6 +113,8 @@ public class AnomalyDetectionPolicyTest { AnomalyDetectionPolicy.KEY_WAKELOCK_DETECTION_ENABLED, true); doReturn(true).when(mKeyValueListParserWrapper).getBoolean( AnomalyDetectionPolicy.KEY_WAKEUP_ALARM_DETECTION_ENABLED, true); + doReturn(true).when(mKeyValueListParserWrapper).getBoolean( + AnomalyDetectionPolicy.KEY_BLUETOOTH_SCAN_DETECTION_ENABLED, true); return new AnomalyDetectionPolicy(mContext, mKeyValueListParserWrapper); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetectorTest.java index 3db209cd05e..941e9cd2bf5 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetectorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetectorTest.java @@ -46,6 +46,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; import java.util.List; @@ -89,6 +90,8 @@ public class BluetoothScanAnomalyDetectorTest { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); + ReflectionHelpers.setField(mPolicy, "bluetoothScanThreshold", + 30 * DateUtils.MINUTE_IN_MILLIS); mAnomalySipper.uidObj = mAnomalyUid; doReturn(ANOMALY_UID).when(mAnomalyUid).getUid();