Return scan_callback when looking for generic addr

Bug: 73728298
Test: Manual
Change-Id: Ia7bb873b7ffc22267380246a48ef1192e30e53bf
(cherry picked from commit 83c28a0ede6c3e64b8413f4d8140e809d4baf3f3)
diff --git a/acts/framework/acts/test_utils/bt/bt_coc_test_utils.py b/acts/framework/acts/test_utils/bt/bt_coc_test_utils.py
index f7d4867..306291f 100644
--- a/acts/framework/acts/test_utils/bt/bt_coc_test_utils.py
+++ b/acts/framework/acts/test_utils/bt/bt_coc_test_utils.py
@@ -162,7 +162,7 @@
             client_ad.log.info(
                 "Orchestrate_coc_connection: Start BLE advertisement and"
                 "scanning. Secured Connection={}".format(secured_conn))
-            mac_address, adv_callback = (
+            mac_address, adv_callback, scan_callback = (
                 get_mac_address_of_generic_advertisement(client_ad, server_ad))
         except BtTestUtilsError as err:
             raise BtCoCTestUtilsError(
@@ -187,6 +187,7 @@
                 False,
                 transport=gatt_transport['le'],
                 opportunistic=False)
+            client_ad.droid.bleStopBleScan(scan_callback)
         except GattTestUtilsError as err:
             client_ad.log.error(err)
             if (adv_callback != None):
diff --git a/acts/framework/acts/test_utils/bt/bt_gatt_utils.py b/acts/framework/acts/test_utils/bt/bt_gatt_utils.py
index f3fb6bc..e3d410e 100644
--- a/acts/framework/acts/test_utils/bt/bt_gatt_utils.py
+++ b/acts/framework/acts/test_utils/bt/bt_gatt_utils.py
@@ -106,7 +106,7 @@
     if mac_address is None:
         if transport == gatt_transport['le']:
             try:
-                mac_address, adv_callback = (
+                mac_address, adv_callback, scan_callback = (
                     get_mac_address_of_generic_advertisement(cen_ad, per_ad))
             except BtTestUtilsError as err:
                 raise GattTestUtilsError(
diff --git a/acts/framework/acts/test_utils/bt/bt_test_utils.py b/acts/framework/acts/test_utils/bt/bt_test_utils.py
index 5ddc9a3..9a930ab 100644
--- a/acts/framework/acts/test_utils/bt/bt_test_utils.py
+++ b/acts/framework/acts/test_utils/bt/bt_test_utils.py
@@ -66,6 +66,7 @@
 from acts.test_utils.bt.bt_constants import scan_result
 from acts.test_utils.bt.bt_constants import scan_failed
 from acts.test_utils.bt.bt_constants import hid_id_keyboard
+
 from acts.test_utils.tel.tel_test_utils import toggle_airplane_mode_by_adb
 from acts.test_utils.tel.tel_test_utils import verify_http_connection
 from acts.utils import exe_cmd
@@ -573,8 +574,7 @@
         raise BtTestUtilsError(
             "Scanner did not find advertisement {}".format(err))
     mac_address = event['data']['Result']['deviceInfo']['address']
-    scan_ad.droid.bleStopBleScan(scan_callback)
-    return mac_address, advertise_callback
+    return mac_address, advertise_callback, scan_callback
 
 def enable_bluetooth(droid, ed):
     if droid.bluetoothCheckState() is True:
diff --git a/acts/tests/google/ble/gatt/GattConnectTest.py b/acts/tests/google/ble/gatt/GattConnectTest.py
index 07c8e1b..0b160a2 100644
--- a/acts/tests/google/ble/gatt/GattConnectTest.py
+++ b/acts/tests/google/ble/gatt/GattConnectTest.py
@@ -103,8 +103,8 @@
             event = self.per_ad.ed.pop_event(expected_event,
                                              self.default_timeout)
         except Empty:
-            self.log.error(gatt_cb_strings['serv_added_err'].format(
-                expected_event))
+            self.log.error(
+                gatt_cb_strings['serv_added_err'].format(expected_event))
             return False
         if event['data']['serviceUuid'].lower() != uuid.lower():
             self.log.error("Uuid mismatch. Found: {}, Expected {}.".format(
@@ -124,8 +124,8 @@
                     mtu_size_found, expected_mtu))
                 return False
         except Empty:
-            self.log.error(gatt_cb_err['mtu_changed_err'].format(
-                expected_event))
+            self.log.error(
+                gatt_cb_err['mtu_changed_err'].format(expected_event))
             return False
 
         expected_event = gatt_cb_strings['mtu_serv_changed'].format(
@@ -139,8 +139,8 @@
                     mtu_size_found, expected_mtu))
                 return False
         except Empty:
-            self.log.error(gatt_cb_err['mtu_serv_changed_err'].format(
-                expected_event))
+            self.log.error(
+                gatt_cb_err['mtu_serv_changed_err'].format(expected_event))
             return False
         return True
 
@@ -228,9 +228,9 @@
             return False
         self.per_ad.droid.bleStopBleAdvertising(adv_callback)
         try:
-            event = self.cen_ad.ed.pop_event(gatt_cb_strings[
-                'gatt_conn_change'].format(gatt_callback,
-                                           self.default_timeout))
+            event = self.cen_ad.ed.pop_event(
+                gatt_cb_strings['gatt_conn_change'].format(
+                    gatt_callback, self.default_timeout))
             self.log.error(
                 "Connection event found when not expected: {}".format(event))
             return False
@@ -277,11 +277,12 @@
             gatt_server_cb)
         self.gatt_server_list.append(gatt_server)
         autoconnect = False
-        mac_address, adv_callback = (
+        mac_address, adv_callback, scan_callback = (
             get_mac_address_of_generic_advertisement(self.cen_ad, self.per_ad))
         try:
             bluetooth_gatt, gatt_callback = setup_gatt_connection(
                 self.cen_ad, mac_address, autoconnect)
+            self.cen_ad.droid.bleStopBleScan(scan_callback)
             self.bluetooth_gatt_list.append(bluetooth_gatt)
         except GattTestUtilsError as err:
             self.log.error(err)
@@ -306,8 +307,8 @@
             event = self.cen_ad.ed.pop_event(expected_event,
                                              self.default_timeout)
         except Empty:
-            self.log.error(gatt_cb_err['gatt_conn_change_err'].format(
-                expected_event))
+            self.log.error(
+                gatt_cb_err['gatt_conn_change_err'].format(expected_event))
             test_result = False
         return self._orchestrate_gatt_disconnection(bluetooth_gatt,
                                                     gatt_callback)
@@ -345,7 +346,7 @@
         gatt_server = self.per_ad.droid.gattServerOpenGattServer(
             gatt_server_cb)
         self.gatt_server_list.append(gatt_server)
-        mac_address, adv_callback = (
+        mac_address, adv_callback, scan_callback = (
             get_mac_address_of_generic_advertisement(self.cen_ad, self.per_ad))
         # Make GATT connection 1
         try:
@@ -355,6 +356,7 @@
                 False,
                 transport=gatt_transport['auto'],
                 opportunistic=False)
+            self.cen_ad.droid.bleStopBleScan(scan_callback)
             self.bluetooth_gatt_list.append(bluetooth_gatt_1)
         except GattTestUtilsError as err:
             self.log.error(err)
@@ -585,8 +587,8 @@
             try:
                 self.cen_ad.ed.pop_event(expected_event, self.default_timeout)
             except Empty:
-                self.log.error(gatt_cb_err['rd_remote_rssi_err'].format(
-                    expected_event))
+                self.log.error(
+                    gatt_cb_err['rd_remote_rssi_err'].format(expected_event))
         return self._orchestrate_gatt_disconnection(bluetooth_gatt,
                                                     gatt_callback)
 
@@ -637,8 +639,8 @@
                 event = self.cen_ad.ed.pop_event(expected_event,
                                                  self.default_timeout)
             except Empty:
-                self.log.error(gatt_cb_err['gatt_serv_disc'].format(
-                    expected_event))
+                self.log.error(
+                    gatt_cb_err['gatt_serv_disc'].format(expected_event))
                 return False
         return self._orchestrate_gatt_disconnection(bluetooth_gatt,
                                                     gatt_callback)
@@ -697,8 +699,8 @@
                                                  self.default_timeout)
                 discovered_services_index = event['data']['ServicesIndex']
             except Empty:
-                self.log.error(gatt_cb_err['gatt_serv_disc'].format(
-                    expected_event))
+                self.log.error(
+                    gatt_cb_err['gatt_serv_disc'].format(expected_event))
                 return False
             log_gatt_server_uuids(self.cen_ad, discovered_services_index)
         return self._orchestrate_gatt_disconnection(bluetooth_gatt,
@@ -754,8 +756,8 @@
                 event = self.cen_ad.ed.pop_event(expected_event,
                                                  self.default_timeout)
             except Empty:
-                self.log.error(gatt_cb_err['gatt_serv_disc'].format(
-                    expected_event))
+                self.log.error(
+                    gatt_cb_err['gatt_serv_disc'].format(expected_event))
                 return False
             discovered_services_index = event['data']['ServicesIndex']
             log_gatt_server_uuids(self.cen_ad, discovered_services_index)
@@ -795,7 +797,7 @@
         gatt_server = self.per_ad.droid.gattServerOpenGattServer(
             gatt_server_cb)
         self.gatt_server_list.append(gatt_server)
-        mac_address, adv_callback = get_mac_address_of_generic_advertisement(
+        mac_address, adv_callback, scan_callback = get_mac_address_of_generic_advertisement(
             self.cen_ad, self.per_ad)
         autoconnect = False
         for i in range(1000):
@@ -803,11 +805,12 @@
             try:
                 bluetooth_gatt, gatt_callback = setup_gatt_connection(
                     self.cen_ad, mac_address, autoconnect)
+                self.cen_ad.droid.bleStopBleScan(scan_callback)
             except GattTestUtilsError as err:
                 self.log.error(err)
                 return False
-            test_result = self._orchestrate_gatt_disconnection(bluetooth_gatt,
-                                                               gatt_callback)
+            test_result = self._orchestrate_gatt_disconnection(
+                bluetooth_gatt, gatt_callback)
             if not test_result:
                 self.log.info("Failed to disconnect from peripheral device.")
                 return False
@@ -867,8 +870,8 @@
             gatt_characteristic['permission_write_encrypted_mitm'])
         gatt_service = self.per_ad.droid.gattServerCreateService(
             service_uuid, gatt_service_types['primary'])
-        self.per_ad.droid.gattServerAddCharacteristicToService(gatt_service,
-                                                               characteristic)
+        self.per_ad.droid.gattServerAddCharacteristicToService(
+            gatt_service, characteristic)
         self.per_ad.droid.gattServerAddService(gatt_server, gatt_service)
         result = self._find_service_added_event(gatt_server_cb, service_uuid)
         if not result:
@@ -884,8 +887,8 @@
                 event = self.cen_ad.ed.pop_event(expected_event,
                                                  self.default_timeout)
             except Empty:
-                self.log.error(gatt_cb_err['gatt_serv_disc'].format(
-                    expected_event))
+                self.log.error(
+                    gatt_cb_err['gatt_serv_disc'].format(expected_event))
                 return False
             discovered_services_index = event['data']['ServicesIndex']
         else:
@@ -914,8 +917,8 @@
                         bonded_devices = \
                             self.cen_ad.droid.bluetoothGetBondedDevices()
                         for device in bonded_devices:
-                            if ('name' in device.keys() and
-                                    device['name'] == target_name):
+                            if ('name' in device.keys()
+                                    and device['name'] == target_name):
                                 bonded = True
                                 break
                     bonded = False
@@ -924,8 +927,8 @@
                         bonded_devices = \
                             self.per_ad.droid.bluetoothGetBondedDevices()
                         for device in bonded_devices:
-                            if ('name' in device.keys() and
-                                    device['name'] == target_name):
+                            if ('name' in device.keys()
+                                    and device['name'] == target_name):
                                 bonded = True
                                 break
         for ad in [self.cen_ad, self.per_ad]:
@@ -935,8 +938,8 @@
             time.sleep(2)
             bonded_devices = ad.droid.bluetoothGetBondedDevices()
             if len(bonded_devices) > 0:
-                self.log.error("Failed to unbond devices: {}".format(
-                    bonded_devices))
+                self.log.error(
+                    "Failed to unbond devices: {}".format(bonded_devices))
                 return False
         return self._orchestrate_gatt_disconnection(bluetooth_gatt,
                                                     gatt_callback)
@@ -1064,8 +1067,8 @@
         self.cen_ad.droid.bleSetScanFilterDeviceName(
             self.per_ad.droid.bluetoothGetLocalName())
         self.cen_ad.droid.bleBuildScanFilter(filter_list)
-        self.cen_ad.droid.bleSetScanSettingsScanMode(ble_scan_settings_modes[
-            'low_latency'])
+        self.cen_ad.droid.bleSetScanSettingsScanMode(
+            ble_scan_settings_modes['low_latency'])
 
         # Setup necessary scan objects.
         scan_settings = self.cen_ad.droid.bleBuildScanSetting()
@@ -1106,8 +1109,8 @@
 
         # Steps 4: Try to connect to the first mac address
         gatt_callback = self.cen_ad.droid.gattCreateGattCallback()
-        self.log.info("Gatt Connect to mac address {}.".format(
-            mac_address_pre_restart))
+        self.log.info(
+            "Gatt Connect to mac address {}.".format(mac_address_pre_restart))
         bluetooth_gatt = self.cen_ad.droid.gattClientConnectGatt(
             gatt_callback, mac_address_pre_restart, autoconnect, transport,
             opportunistic, gatt_phy_mask['1m_mask'])
@@ -1127,8 +1130,8 @@
         self.cen_ad.droid.gattClientDisconnect(bluetooth_gatt)
 
         # Step 6: Connect to second mac address.
-        self.log.info("Gatt Connect to mac address {}.".format(
-            mac_address_post_restart))
+        self.log.info(
+            "Gatt Connect to mac address {}.".format(mac_address_post_restart))
         bluetooth_gatt = self.cen_ad.droid.gattClientConnectGatt(
             gatt_callback, mac_address_post_restart, autoconnect, transport,
             opportunistic, gatt_phy_mask['1m_mask'])
@@ -1149,4 +1152,4 @@
         except Empty:
             self.log.error("No connection update was found.")
             return False
-        return self.cen_ad.droid.gattClientDisconnect(bluetooth_gatt)
\ No newline at end of file
+        return self.cen_ad.droid.gattClientDisconnect(bluetooth_gatt)
diff --git a/acts/tests/google/ble/system_tests/BleStressTest.py b/acts/tests/google/ble/system_tests/BleStressTest.py
index a1387ab..5be082a 100644
--- a/acts/tests/google/ble/system_tests/BleStressTest.py
+++ b/acts/tests/google/ble/system_tests/BleStressTest.py
@@ -168,7 +168,8 @@
             self.adv_ad.droid.bleStartBleAdvertising(
                 advertise_callback, advertise_data, advertise_settings)
             expected_advertise_event_name = "".join(
-                ["BleAdvertise", str(advertise_callback), "onSuccess"])
+                ["BleAdvertise",
+                 str(advertise_callback), "onSuccess"])
             worker = self.adv_ad.ed.handle_event(
                 self.bleadvertise_verify_onsuccess_handler,
                 expected_advertise_event_name, ([]), self.default_timeout)
@@ -176,7 +177,8 @@
                 self.log.debug(worker.result(self.default_timeout))
             except Empty as error:
                 self.log.debug(" ".join(
-                    ["Test failed with Empty error:", str(error)]))
+                    ["Test failed with Empty error:",
+                     str(error)]))
                 test_result = False
             except concurrent.futures._base.TimeoutError as error:
                 self.log.debug(" ".join([
@@ -219,7 +221,8 @@
         self.adv_ad.droid.bleStartBleAdvertising(
             advertise_callback, advertise_data, advertise_settings)
         expected_advertise_event_name = "".join(
-            ["BleAdvertise", str(advertise_callback), "onSuccess"])
+            ["BleAdvertise",
+             str(advertise_callback), "onSuccess"])
         worker = self.adv_ad.ed.handle_event(
             self.bleadvertise_verify_onsuccess_handler,
             expected_advertise_event_name, ([]), self.default_timeout)
@@ -227,7 +230,8 @@
             self.log.debug(worker.result(self.default_timeout))
         except Empty as error:
             self.log.debug(" ".join(
-                ["Test failed with Empty error:", str(error)]))
+                ["Test failed with Empty error:",
+                 str(error)]))
             test_result = False
         except concurrent.futures._base.TimeoutError as error:
             self.log.debug(" ".join([
@@ -247,7 +251,8 @@
             self.log.debug(worker.result(self.default_timeout))
         except Empty as error:
             self.log.debug(" ".join(
-                ["Test failed with Empty error:", str(error)]))
+                ["Test failed with Empty error:",
+                 str(error)]))
             test_result = False
         except concurrent.futures._base.TimeoutError as error:
             self.log.debug(" ".join([
@@ -318,7 +323,7 @@
         iterations = 100
         for i in range(iterations):
             try:
-                target_address, adv_callback = get_mac_address_of_generic_advertisement(
+                target_address, adv_callback, scan_callback = get_mac_address_of_generic_advertisement(
                     self.scn_ad, self.adv_ad)
             except BtTestUtilsError as err:
                 self.log.error(err)
@@ -339,6 +344,7 @@
                 self.log.error("Failed to unbond device from advertiser.")
                 return False
             self.adv_ad.droid.bleStopBleAdvertising(adv_callback)
+            self.scn_ad.droid.bleStopBleScan(scan_callback)
             # Magic sleep to let unbonding finish
             time.sleep(2)
         return True