Merge "Set a floor value for BLE Batch Scan report delay of 5000ms"
diff --git a/core/java/android/bluetooth/le/ScanSettings.java b/core/java/android/bluetooth/le/ScanSettings.java
index 368d1ee..f3e971a 100644
--- a/core/java/android/bluetooth/le/ScanSettings.java
+++ b/core/java/android/bluetooth/le/ScanSettings.java
@@ -20,6 +20,7 @@
 import android.bluetooth.BluetoothDevice;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.provider.DeviceConfig;
 
 /**
  * Bluetooth LE scan settings are passed to {@link BluetoothLeScanner#startScan} to define the
@@ -141,6 +142,12 @@
      */
     public static final int PHY_LE_ALL_SUPPORTED = 255;
 
+    /**
+     * The default floor value for report delays greater than 0 in
+     * {@link Builder#setReportDelay(long)}.
+     */
+    private static final long DEFAULT_REPORT_DELAY_FLOOR = 5000;
+
     // Bluetooth LE scan mode.
     private int mScanMode;
 
@@ -345,18 +352,28 @@
         }
 
         /**
-         * Set report delay timestamp for Bluetooth LE scan.
+         * Set report delay timestamp for Bluetooth LE scan. If set to 0, you will be notified of
+         * scan results immediately. If > 0, scan results are queued up and delivered after the
+         * requested delay or 5000 milliseconds (whichever is higher). Note scan results may be
+         * delivered sooner if the internal buffers fill up.
          *
-         * @param reportDelayMillis Delay of report in milliseconds. Set to 0 to be notified of
-         * results immediately. Values > 0 causes the scan results to be queued up and delivered
-         * after the requested delay or when the internal buffers fill up.
-         * @throws IllegalArgumentException If {@code reportDelayMillis} < 0.
+         * @param reportDelayMillis         how frequently scan results should be delivered in
+         *                                  milliseconds
+         * @throws IllegalArgumentException if {@code reportDelayMillis} < 0
          */
         public Builder setReportDelay(long reportDelayMillis) {
             if (reportDelayMillis < 0) {
                 throw new IllegalArgumentException("reportDelay must be > 0");
             }
-            mReportDelayMillis = reportDelayMillis;
+
+            long floor = DeviceConfig.getLong(DeviceConfig.NAMESPACE_BLUETOOTH, "report_delay",
+                    DEFAULT_REPORT_DELAY_FLOOR);
+
+            if (reportDelayMillis > 0 && reportDelayMillis < floor) {
+                mReportDelayMillis = floor;
+            } else {
+                mReportDelayMillis = reportDelayMillis;
+            }
             return this;
         }