Unregister display listener
Display listener must be unregistered in ScanManager::cleanup()
to avoid getting display state change callbacks between
ScanManager::cleanup() and ScanManager object destruction.
BUG: 64253576
Test: Screen on and screen off during BLE scanning.
Screen on and screen off with Bluetooth off.
Change-Id: I5b1f26696c44aaaca3720a200d85983afc8d2759
diff --git a/android/app/src/com/android/bluetooth/gatt/ScanManager.java b/android/app/src/com/android/bluetooth/gatt/ScanManager.java
index 7131714..65f4f6d 100644
--- a/android/app/src/com/android/bluetooth/gatt/ScanManager.java
+++ b/android/app/src/com/android/bluetooth/gatt/ScanManager.java
@@ -107,13 +107,15 @@
mScanNative = new ScanNative();
curUsedTrackableAdvertisements = 0;
mDm = (DisplayManager) mService.getSystemService(Context.DISPLAY_SERVICE);
- mDm.registerDisplayListener(mDisplayListener, null);
}
void start() {
HandlerThread thread = new HandlerThread("BluetoothScanManager");
thread.start();
mHandler = new ClientHandler(thread.getLooper());
+ if (mDm != null) {
+ mDm.registerDisplayListener(mDisplayListener, null);
+ }
}
void cleanup() {
@@ -122,6 +124,10 @@
mSuspendedScanClients.clear();
mScanNative.cleanup();
+ if (mDm != null) {
+ mDm.unregisterDisplayListener(mDisplayListener);
+ }
+
if (mHandler != null) {
// Shut down the thread
mHandler.removeCallbacksAndMessages(null);