From ce0c1194169ca00cf6502f37bdea0a4c7302962e Mon Sep 17 00:00:00 2001 From: eddy Date: Sun, 26 Jul 2026 16:51:53 +0200 Subject: [PATCH] Use named Runnable for scheduled BLE scans and cancel on pause Replace anonymous lambdas in handler.postDelayed with a shared scanRunnable so that handler.removeCallbacks(scanRunnable) in onPause cancels any pending scan. Prevents duplicate or orphaned scan starts during rapid activity transitions. Reviewed in codereview.md (recommendation 2.2). --- .../app/src/main/java/com/eddy/atomrelay/MainActivity.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt b/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt index 191eb30..6ef54c3 100644 --- a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt +++ b/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt @@ -49,6 +49,7 @@ class MainActivity : AppCompatActivity() { private var isScanning = false private var scanTimedOut = false private val handler = Handler(Looper.getMainLooper()) + private val scanRunnable = Runnable { startScan() } private var seq = 1 private var hmacKey: ByteArray? = null @@ -89,7 +90,7 @@ class MainActivity : AppCompatActivity() { bluetoothGatt = null relayCharacteristic = null seq = 1 - handler.postDelayed({ startScan() }, 2000) + handler.postDelayed(scanRunnable, 2000) } } @@ -165,7 +166,7 @@ class MainActivity : AppCompatActivity() { relayCharacteristic = null seq = 1 loadHmacKey() - handler.postDelayed({ startScan() }, 500) + handler.postDelayed(scanRunnable, 500) } } @@ -175,12 +176,13 @@ class MainActivity : AppCompatActivity() { if (hmacKey == null) { statusText.text = "Geen HMAC sleutel - open Instellingen" } else if (!isScanning && bluetoothGatt == null) { - handler.postDelayed({ startScan() }, 300) + handler.postDelayed(scanRunnable, 300) } } override fun onPause() { super.onPause() + handler.removeCallbacks(scanRunnable) stopScan() }