Change behavior of BleBackgroundScanTest

Different new behaviors were introduced
in O and test changes were missed. This
CL addresses these various behavioral
changes including off screen unfliltered
scans.

Test: Ran BleBackgroundScanTest 10 times
Bug: 64603105
Bug: 64585509
Change-Id: I9341461bc43ac5da994f71a409b3d5f2215f6ff7
diff --git a/acts/tests/google/ble/scan/BleBackgroundScanTest.py b/acts/tests/google/ble/scan/BleBackgroundScanTest.py
index 12009b5..3cb2842 100644
--- a/acts/tests/google/ble/scan/BleBackgroundScanTest.py
+++ b/acts/tests/google/ble/scan/BleBackgroundScanTest.py
@@ -24,11 +24,13 @@
 from acts.test_utils.bt.bt_test_utils import bluetooth_off
 from acts.test_utils.bt.bt_test_utils import bluetooth_on
 from acts.test_utils.bt.bt_test_utils import cleanup_scanners_and_advertisers
+from acts.test_utils.bt.bt_test_utils import enable_bluetooth
 from acts.test_utils.bt.bt_test_utils import generate_ble_advertise_objects
 from acts.test_utils.bt.bt_test_utils import generate_ble_scan_objects
 from acts.test_utils.bt.bt_constants import bluetooth_le_off
 from acts.test_utils.bt.bt_constants import bluetooth_le_on
 from acts.test_utils.bt.bt_constants import bt_adapter_states
+from acts.test_utils.bt.bt_constants import ble_scan_settings_modes
 from acts.test_utils.bt.bt_constants import scan_result
 
 import time
@@ -49,10 +51,9 @@
         self.adv_ad = self.android_devices[1]
 
     def setup_test(self):
-        if (self.scn_ad.droid.bluetoothGetLeState() ==
-                bt_adapter_states['off']):
-            self.scn_ad.droid.bluetoothEnableBLE()
-            self.scn_ad.ed.pop_event(bluetooth_le_on)
+        # Always start tests with Bluetooth enabled and BLE disabled.
+        enable_bluetooth(self.scn_ad.droid, self.scn_ad.ed)
+        self.scn_ad.droid.bluetoothDisableBLE()
         for a in self.android_devices:
             a.ed.clear_all_events()
         return True
@@ -65,21 +66,13 @@
         self.active_scan_callback_list = []
 
     def _setup_generic_advertisement(self):
+        self.adv_ad.droid.bleSetAdvertiseDataIncludeDeviceName(True)
         adv_callback, adv_data, adv_settings = generate_ble_advertise_objects(
             self.adv_ad.droid)
         self.adv_ad.droid.bleStartBleAdvertising(adv_callback, adv_data,
                                                  adv_settings)
         self.active_adv_callback_list.append(adv_callback)
 
-    def _verify_no_events_found(self, event_name):
-        try:
-            self.scn_ad.ed.pop_event(event_name, self.default_timeout)
-            self.log.error("Found an event when none was expected.")
-            return False
-        except Empty:
-            self.log.info("No scan result found as expected.")
-            return True
-
     @BluetoothBaseTest.bt_test_wrap
     @test_tracker_info(uuid='4d13c3a8-1805-44ef-a92a-e385540767f1')
     def test_background_scan(self):
@@ -105,8 +98,15 @@
         TAGS: LE, Advertising, Scanning, Background Scanning
         Priority: 0
         """
-        import time
+        self.scn_ad.droid.bluetoothEnableBLE()
         self._setup_generic_advertisement()
+        self.scn_ad.droid.bleSetScanSettingsScanMode(ble_scan_settings_modes[
+            'low_latency'])
+        filter_list, scan_settings, scan_callback = generate_ble_scan_objects(
+            self.scn_ad.droid)
+        self.scn_ad.droid.bleSetScanFilterDeviceName(
+            self.adv_ad.droid.bluetoothGetLocalName())
+        self.scn_ad.droid.bleBuildScanFilter(filter_list)
         self.scn_ad.droid.bluetoothToggleState(False)
         try:
             self.scn_ad.ed.pop_event(bluetooth_off, self.default_timeout)
@@ -114,22 +114,6 @@
             self.log.error("Bluetooth Off event not found. Expected {}".format(
                 bluetooth_off))
             return False
-        self.scn_ad.droid.bluetoothDisableBLE()
-        try:
-            self.scn_ad.ed.pop_event(bluetooth_off, self.default_timeout)
-        except Empty:
-            self.log.error("Bluetooth Off event not found. Expected {}".format(
-                bluetooth_off))
-            return False
-        self.scn_ad.droid.bluetoothEnableBLE()
-        try:
-            self.scn_ad.ed.pop_event(bluetooth_off, self.default_timeout * 2)
-        except Empty:
-            self.log.error("Bluetooth On event not found. Expected {}".format(
-                bluetooth_on))
-            return False
-        filter_list, scan_settings, scan_callback = generate_ble_scan_objects(
-            self.scn_ad.droid)
         self.scn_ad.droid.bleStartBleScan(filter_list, scan_settings,
                                           scan_callback)
         expected_event = scan_result.format(scan_callback)
@@ -168,15 +152,21 @@
         """
         self._setup_generic_advertisement()
         self.scn_ad.droid.bluetoothEnableBLE()
+        self.scn_ad.droid.bleSetScanSettingsScanMode(ble_scan_settings_modes[
+            'low_latency'])
+        filter_list, scan_settings, scan_callback = generate_ble_scan_objects(
+            self.scn_ad.droid)
+        self.scn_ad.droid.bleSetScanFilterDeviceName(
+            self.adv_ad.droid.bluetoothGetLocalName())
+        self.scn_ad.droid.bleBuildScanFilter(filter_list)
         self.scn_ad.droid.bluetoothToggleState(False)
         try:
             self.scn_ad.ed.pop_event(bluetooth_off, self.default_timeout)
         except Empty:
+            self.log.info(self.scn_ad.droid.bluetoothCheckState())
             self.log.error("Bluetooth Off event not found. Expected {}".format(
                 bluetooth_off))
             return False
-        filter_list, scan_settings, scan_callback = generate_ble_scan_objects(
-            self.scn_ad.droid)
         try:
             self.scn_ad.droid.bleStartBleScan(filter_list, scan_settings,
                                               scan_callback)
@@ -187,9 +177,6 @@
                 self.log.error("Scan Result event not found. Expected {}".
                                format(expected_event))
                 return False
-            self.log.info("Was able to start background scan even though ble "
-                          "was disabled.")
-            return False
         except Exception:
             self.log.info(
                 "Was not able to start a background scan as expected.")
@@ -226,38 +213,22 @@
         """
         ble_state_error_msg = "Bluetooth LE State not OK {}. Expected {} got {}"
         # Enable BLE always available (effectively enabling BT in location)
-        self.scn_ad.adb.shell("settings put global ble_scan_always_enabled 1")
-
+        self.scn_ad.droid.bluetoothEnableBLE()
         self.scn_ad.droid.bluetoothToggleState(False)
         try:
             self.scn_ad.ed.pop_event(bluetooth_off, self.default_timeout)
         except Empty:
             self.log.error("Bluetooth Off event not found. Expected {}".format(
                 bluetooth_off))
+            self.log.info(self.scn_ad.droid.bluetoothCheckState())
             return False
 
         # Sleep because LE turns off after the bluetooth off event fires
         time.sleep(self.default_timeout)
         state = self.scn_ad.droid.bluetoothGetLeState()
-        if state != bt_adapter_states['off']:
-            self.log.error(
-                ble_state_error_msg.format("after BT Disable",
-                                           bt_adapter_states['off'], state))
-            return False
-
-        # TODO: BleStateChangedOn got generated as we shut off bluetooth above?
-        self.scn_ad.ed.clear_all_events()
-        result = self.scn_ad.droid.bluetoothEnableBLE()
-        try:
-            self.scn_ad.ed.pop_event(bluetooth_le_on, self.default_timeout)
-        except Empty:
-            self.log.error("Bluetooth LE On event not found. Expected {}".
-                           format(bluetooth_le_on))
-            return False
-        state = self.scn_ad.droid.bluetoothGetLeState()
         if state != bt_adapter_states['ble_on']:
             self.log.error(
-                ble_state_error_msg.format("before Airplane Mode OFF",
+                ble_state_error_msg.format("after BT Disable",
                                            bt_adapter_states['ble_on'], state))
             return False