OSDN Git Service

Hook up bt related knobs to AnomalyDetectionPolicy
authorjackqdyulei <jackqdyulei@google.com>
Thu, 15 Jun 2017 22:30:44 +0000 (15:30 -0700)
committerjackqdyulei <jackqdyulei@google.com>
Mon, 19 Jun 2017 18:15:21 +0000 (11:15 -0700)
This cl adds the following knobs:
1. bluetoothScanDetectionEnabled: whether to enable this detector
2. bluetoothScanThreshold: threshold about bt unoptimized scanning
time in background

Also add the default values for these knobs, which are:
1. bluetoothScanDetectionEnabled: true
2. bluetoothScanThreshold: 30 minutes

Bug: 36921532
Test: RunSettingsRoboTests
Change-Id: I7619453ebe3cc3f5a13b3bbd4fbf3b65a1f1d45c

src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java
src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetector.java
tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicyTest.java
tests/robotests/src/com/android/settings/fuelgauge/anomaly/checker/BluetoothScanAnomalyDetectorTest.java

index 7dbae36..647737c 100644 (file)
@@ -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
@@ -66,6 +70,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
      *
      * @see Settings.Global#ANOMALY_DETECTION_CONSTANTS
@@ -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
         }
index a0aa8b7..619386e 100644 (file)
@@ -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
index d5bd53b..169cba8 100644 (file)
@@ -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);
     }
index 3db209c..941e9cd 100644 (file)
@@ -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();