From 2a0f84b53b7695c67445d32b77ab60f6377667b2 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sun, 13 Jul 2025 17:16:31 +0200 Subject: [PATCH] adjust scan intervals and reduce logging --- .../java/com/bitchat/android/MainActivity.kt | 2 +- .../mesh/BluetoothConnectionManager.kt | 27 +++----- .../android/mesh/BluetoothMeshService.kt | 4 +- .../com/bitchat/android/mesh/PowerManager.kt | 66 +++++++++---------- .../onboarding/BluetoothStatusManager.kt | 4 +- 5 files changed, 47 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/MainActivity.kt b/app/src/main/java/com/bitchat/android/MainActivity.kt index 5997a9f1..952a44a0 100644 --- a/app/src/main/java/com/bitchat/android/MainActivity.kt +++ b/app/src/main/java/com/bitchat/android/MainActivity.kt @@ -189,7 +189,7 @@ class MainActivity : ComponentActivity() { * Check Bluetooth status and proceed with onboarding flow */ private fun checkBluetoothAndProceed() { - android.util.Log.d("MainActivity", "Checking Bluetooth status") + // android.util.Log.d("MainActivity", "Checking Bluetooth status") // For first-time users, skip Bluetooth check and go straight to permissions // We'll check Bluetooth after permissions are granted diff --git a/app/src/main/java/com/bitchat/android/mesh/BluetoothConnectionManager.kt b/app/src/main/java/com/bitchat/android/mesh/BluetoothConnectionManager.kt index 7fb2ce14..10b78012 100644 --- a/app/src/main/java/com/bitchat/android/mesh/BluetoothConnectionManager.kt +++ b/app/src/main/java/com/bitchat/android/mesh/BluetoothConnectionManager.kt @@ -148,7 +148,7 @@ class BluetoothConnectionManager( startPeriodicCleanup() - Log.i(TAG, "Power-optimized Bluetooth services started successfully") + Log.i(TAG, "Bluetooth services started successfully") } return true @@ -254,7 +254,8 @@ class BluetoothConnectionManager( */ fun getDebugInfo(): String { return buildString { - appendLine("=== Power-Optimized Bluetooth Connection Manager ===") + appendLine("=== Bluetooth Connection Manager ===") + appendLine("Bluetooth MAC Address: ${bluetoothAdapter?.address}") appendLine("Active: $isActive") appendLine("Bluetooth Enabled: ${bluetoothAdapter?.isEnabled}") appendLine("Has Permissions: ${hasBluetoothPermissions()}") @@ -586,7 +587,6 @@ class BluetoothConnectionManager( // DEBUG: Log ALL scan results first val device = result.device val rssi = result.rssi - val scanRecord = result.scanRecord Log.d(TAG, "Scan result: device: ${device.address}, Name: '${device.name}', RSSI: $rssi") handleScanResult(result) } @@ -675,7 +675,7 @@ class BluetoothConnectionManager( null } - Log.d(TAG, "Processing bitchat device: $deviceAddress, name: '$deviceName', peerID: $extractedPeerID, RSSI: $rssi") + // Log.d(TAG, "Processing bitchat device: $deviceAddress, name: '$deviceName', peerID: $extractedPeerID, RSSI: $rssi") // Power-aware RSSI filtering if (rssi < powerManager.getRSSIThreshold()) { @@ -686,7 +686,7 @@ class BluetoothConnectionManager( // CRITICAL FIX: Prevent multiple simultaneous connections to same device // Check if already connected OR already attempting to connect if (connectedDevices.containsKey(deviceAddress)) { - Log.d(TAG, "Device $deviceAddress already connected, skipping") + // Log.d(TAG, "Device $deviceAddress already connected, skipping") return } @@ -717,12 +717,6 @@ class BluetoothConnectionManager( val attempts = (currentAttempt?.attempts ?: 0) + 1 pendingConnections[deviceAddress] = ConnectionAttempt(attempts) - if (extractedPeerID != null) { - Log.i(TAG, "Initiating connection to peer $extractedPeerID at $deviceAddress (RSSI: $rssi, attempt: $attempts)") - } else { - Log.i(TAG, "Initiating connection to device with bitchat service at $deviceAddress (RSSI: $rssi, attempt: $attempts)") - } - // Start connection immediately while holding lock connectToDevice(device, rssi) } @@ -733,6 +727,7 @@ class BluetoothConnectionManager( if (!hasBluetoothPermissions()) return val deviceAddress = device.address + Log.d(TAG, "Connecting to device: $deviceAddress") val gattCallback = object : BluetoothGattCallback() { override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) { @@ -795,9 +790,7 @@ class BluetoothConnectionManager( } } - override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) { - Log.d(TAG, "Client: Service discovery completed for $deviceAddress with status: $status") - + override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) { if (status == BluetoothGatt.GATT_SUCCESS) { val service = gatt.getService(SERVICE_UUID) if (service != null) { @@ -854,16 +847,16 @@ class BluetoothConnectionManager( } try { - Log.d(TAG, "Attempting GATT connection to $deviceAddress with autoConnect=false") + Log.d(TAG, "Client: Attempting GATT connection to $deviceAddress with autoConnect=false") val gatt = device.connectGatt(context, false, gattCallback, BluetoothDevice.TRANSPORT_LE) if (gatt == null) { Log.e(TAG, "connectGatt returned null for $deviceAddress") pendingConnections.remove(deviceAddress) } else { - Log.d(TAG, "GATT connection initiated successfully for $deviceAddress") + Log.d(TAG, "Client: GATT connection initiated successfully for $deviceAddress") } } catch (e: Exception) { - Log.e(TAG, "Exception connecting to $deviceAddress: ${e.message}") + Log.e(TAG, "Client: Exception connecting to $deviceAddress: ${e.message}") pendingConnections.remove(deviceAddress) } } diff --git a/app/src/main/java/com/bitchat/android/mesh/BluetoothMeshService.kt b/app/src/main/java/com/bitchat/android/mesh/BluetoothMeshService.kt index 7732fd0f..85ba999d 100644 --- a/app/src/main/java/com/bitchat/android/mesh/BluetoothMeshService.kt +++ b/app/src/main/java/com/bitchat/android/mesh/BluetoothMeshService.kt @@ -291,9 +291,7 @@ class BluetoothMeshService(private val context: Context) { Log.i(TAG, "Starting Bluetooth mesh service with peer ID: $myPeerID") if (connectionManager.startServices()) { - isActive = true - Log.i(TAG, "Bluetooth services started successfully") - + isActive = true // Send initial announcements after services are ready serviceScope.launch { delay(1000) diff --git a/app/src/main/java/com/bitchat/android/mesh/PowerManager.kt b/app/src/main/java/com/bitchat/android/mesh/PowerManager.kt index 2c8bcab0..2d879269 100644 --- a/app/src/main/java/com/bitchat/android/mesh/PowerManager.kt +++ b/app/src/main/java/com/bitchat/android/mesh/PowerManager.kt @@ -26,12 +26,12 @@ class PowerManager(private val context: Context) { private const val MEDIUM_BATTERY = 50 // Scan duty cycle periods (ms) - private const val SCAN_ON_DURATION_NORMAL = 2000L // 2 seconds on - private const val SCAN_OFF_DURATION_NORMAL = 8000L // 8 seconds off - private const val SCAN_ON_DURATION_POWER_SAVE = 1000L // 1 second on - private const val SCAN_OFF_DURATION_POWER_SAVE = 15000L // 15 seconds off - private const val SCAN_ON_DURATION_ULTRA_LOW = 500L // 0.5 seconds on - private const val SCAN_OFF_DURATION_ULTRA_LOW = 30000L // 30 seconds off + private const val SCAN_ON_DURATION_NORMAL = 8000L // 8 seconds on + private const val SCAN_OFF_DURATION_NORMAL = 2000L // 2 seconds off + private const val SCAN_ON_DURATION_POWER_SAVE = 2000L // 2 seconds on + private const val SCAN_OFF_DURATION_POWER_SAVE = 8000L // 8 seconds off + private const val SCAN_ON_DURATION_ULTRA_LOW = 1000L // 1 second on + private const val SCAN_OFF_DURATION_ULTRA_LOW = 10000L // 10 seconds off // Connection limits private const val MAX_CONNECTIONS_NORMAL = 8 @@ -112,38 +112,38 @@ class PowerManager(private val context: Context) { /** * Get scan settings optimized for current power mode */ - fun getScanSettings(): ScanSettings { - // CRITICAL FIX: Set reportDelay to 0 for all modes. - // When using a custom duty cycle, we want scan results delivered immediately, - // not batched. A non-zero report delay can conflict with the scan window, - // causing missed results if the scan stops before the delay is met. - val builder = ScanSettings.Builder() - .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) + fun getScanSettings(): ScanSettings { + // CRITICAL FIX: Set reportDelay to 0 for all modes. + // When using a custom duty cycle, we want scan results delivered immediately, + // not batched. A non-zero report delay can conflict with the scan window, + // causing missed results if the scan stops before the delay is met. + val builder = ScanSettings.Builder() + .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) - when (currentMode) { - PowerMode.PERFORMANCE -> builder - .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) - .setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE) - .setNumOfMatches(ScanSettings.MATCH_NUM_MAX_ADVERTISEMENT) + when (currentMode) { + PowerMode.PERFORMANCE -> builder + .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) + .setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE) + .setNumOfMatches(ScanSettings.MATCH_NUM_MAX_ADVERTISEMENT) - PowerMode.BALANCED -> builder - .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) - .setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE) - .setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT) + PowerMode.BALANCED -> builder + .setScanMode(ScanSettings.SCAN_MODE_BALANCED) + .setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE) + .setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT) - PowerMode.POWER_SAVER -> builder - .setScanMode(ScanSettings.SCAN_MODE_LOW_POWER) - .setMatchMode(ScanSettings.MATCH_MODE_STICKY) - .setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT) + PowerMode.POWER_SAVER -> builder + .setScanMode(ScanSettings.SCAN_MODE_LOW_POWER) + .setMatchMode(ScanSettings.MATCH_MODE_STICKY) + .setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT) - PowerMode.ULTRA_LOW_POWER -> builder - .setScanMode(ScanSettings.SCAN_MODE_OPPORTUNISTIC) - .setMatchMode(ScanSettings.MATCH_MODE_STICKY) - .setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT) - } - - return builder.setReportDelay(0).build() + PowerMode.ULTRA_LOW_POWER -> builder + .setScanMode(ScanSettings.SCAN_MODE_OPPORTUNISTIC) + .setMatchMode(ScanSettings.MATCH_MODE_STICKY) + .setNumOfMatches(ScanSettings.MATCH_NUM_ONE_ADVERTISEMENT) } + + return builder.setReportDelay(0).build() + } /** * Get advertising settings optimized for current power mode diff --git a/app/src/main/java/com/bitchat/android/onboarding/BluetoothStatusManager.kt b/app/src/main/java/com/bitchat/android/onboarding/BluetoothStatusManager.kt index b580ccdf..54c00ecc 100644 --- a/app/src/main/java/com/bitchat/android/onboarding/BluetoothStatusManager.kt +++ b/app/src/main/java/com/bitchat/android/onboarding/BluetoothStatusManager.kt @@ -91,7 +91,7 @@ class BluetoothStatusManager( * This should be called on every app startup */ fun checkBluetoothStatus(): BluetoothStatus { - Log.d(TAG, "Checking Bluetooth status") + // Log.d(TAG, "Checking Bluetooth status") return when { bluetoothAdapter == null -> { @@ -103,7 +103,7 @@ class BluetoothStatusManager( BluetoothStatus.DISABLED } else -> { - Log.d(TAG, "Bluetooth is enabled and ready") + // Log.d(TAG, "Bluetooth is enabled and ready") BluetoothStatus.ENABLED } }